English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
O cabeçalho de arquivo é o arquivo com a extensão .h Os arquivos, que contêm declarações de funções C e definições de macros, são compartilhados entre muitos arquivos de origem. Existem dois tipos de cabeçalhos de arquivo: cabeçalhos de arquivo escritos por programadores e cabeçalhos de arquivo incluídos pelo compilador.
Para usar o cabeçalho de arquivo no programa, é necessário usar a instrução de pré-processamento C #include Para citá-lo. Anteriormente, já vimos stdio.h Cabeçalho de arquivo, que é o cabeçalho de arquivo incluído pelo compilador.
Citar o cabeçalho de arquivo é equivalente a copiar o conteúdo do cabeçalho de arquivo, mas não copiaremos o conteúdo do cabeçalho de arquivo diretamente no arquivo de origem, porque isso é fácil de errar, especialmente quando o programa é composto por muitos arquivos de origem.
Uma prática simples em C ou C++ 程序中,建议把所有的常量、宏、系统全局变量和函数原型写在头文件中,在需要的时候随时引用这些头文件。
使用预处理指令 #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
SYSTEM_H será expandido, o pré-processador buscará system_1.h, como #include Escrito originalmente. SYSTEM_H pode ser acessado por -A Opção D é Definida no Seu Makefile.