English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Manuale di base del linguaggio C

Controllo di flusso del linguaggio C

Funzioni del linguaggio C

Array del linguaggio C

Puntatori del linguaggio C

Stringhe del linguaggio C

Struttura del linguaggio C

File del linguaggio C

Altri C

Manuale di riferimento del linguaggio C

Header del linguaggio C

I file di intestazione sono estensione .h Il file contiene dichiarazioni di funzione C e definizioni di macro, condivise tra molti file di origine. Ci sono due tipi di file di intestazione: i file di intestazione scritti dai programmatori e i file di intestazione portati dal compilatore.

Per utilizzare i file di intestazione nel programma, è necessario utilizzare l'istruzione di pre-processamento C #include Per richiamarlo. Abbiamo già visto prima stdio.h Il file di intestazione, è il file di intestazione portato dal compilatore.

Richiamare i file di intestazione è come copiare il loro contenuto, ma non copiamo direttamente il contenuto dei file di intestazione nel file di origine, perché è facile commettere errori, specialmente quando il programma è composto da molti file di origine.

Una pratica semplice in C o C++ programmi, si consiglia di scrivere tutti i costanti, macro, variabili globali di sistema e prototipi di funzione nei file di intestazione, e di richiamare questi file di intestazione in qualsiasi momento necessario.

引用头文件的语法

使用预处理指令 #include 可以引用用户和系统头文件。它的形式有以下两种:

#include <file>

这种形式用于引用系统头文件。它在系统目录的标准列表中搜索名为 file 的文件。在编译源代码时,您可以通过 -I 选项把目录前置在该列表前。

#include "file"

这种形式用于引用用户头文件。它在包含当前文件的目录中搜索名为 file 的文件。在编译源代码时,您可以通过 -I 选项把目录前置在该列表前。

引用头文件的操作

#include 指令会指示 C 预处理器浏览指定的文件作为输入。预处理器的输出包含了已经生成的输出,被引用文件生成的输出以及 #include 指令之后的文本输出。例如,如果您有一个头文件 header.h,如下:

char *test(void);

和一个使用了头文件的主程序 program.c,如下:

int x;
#include "header.h"
int main(void)
{
   puts(test());
}

编译器会看到如下的代码信息:

int x;
char *test(void);
int main(void)
{
   puts(test());
}

只引用一次头文件

如果一个头文件被引用两次,编译器会处理两次头文件的内容,这将产生错误。为了防止这种情况,标准的做法是把文件的整个内容放在条件编译语句中,如下:

#ifndef HEADER_FILE
#define HEADER_FILE
the entire header file file
#endif

这种结构就是通常所说的包装器 #ifndef。当再次引用头文件时,条件为假,因为 HEADER_FILE 已定义。此时,预处理器会跳过文件的整个内容,编译器会忽略它。

有条件引用

有时需要从多个不同的头文件中选择一个引用到程序中。例如,需要指定在不同的操作系统上使用的配置参数。您可以通过一系列条件来实现这点,如下:

#if SYSTEM_1
   # include "system_1.h"
#elif SYSTEM_2
   # include "system_2.h"
#elif SYSTEM_3
   ...
#endif

但是如果头文件比较多的时候,这么做是很不妥当的,预处理器使用宏来定义头文件的名称。这就是所谓的有条件引用。它不是用头文件的名称作为 #include 参数的直接参数,您只需要使用宏名称代替即可:

 #define SYSTEM_H "system_1.h"
 ...
 #include SYSTEM_H

Il SYSTEM_H verrà espanso, il preprocessore cercherà system_1.h, come #include Scritto come originariamente. Il SYSTEM_H può essere definito nel Makefile con l'opzione -D.