C头文件
引用头文件相当于复制头文件的内容。
建议把所有的常量
、宏
、系统全局变量
和函数原型
写在头文件中,在需要的时候随时引用这些头文件。
引用头文件的语法
#include <file>
在系统目录中搜索
#include "file"
在包含当前文件的目录中搜索
只引用一次头文件
如果一个头文件被引用两次,编译器会处理两次头文件的内容,这将产生错误。为了防止这种情况,标准的做法是把文件的整个内容放在条件编译语句中,如下:
#ifndef HEADER_FILE
#define HEADER_FILE
the entire header file file
#endif
有条件引用
有时需要从多个不同的头文件中选择一个引用到程序中。例如,需要指定在不同的操作系统上使用的配置参数。
#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 会扩展,预处理器会查找 system_1.h,就像 #include 最初编写的那样。SYSTEM_H 可通过 -D 选项被您的 Makefile 定义。
最佳实践
在有多个 .h 文件和多个 .c 文件的时候,往往我们会用一个 global.h
的头文件来包括所有的 .h 文件,然后在除 global.h
文件外的头文件中 包含 global.h
就可以实现所有头文件的包含,同时不会乱。方便在各个文件里面调用其他文件的函数或者变量。
#ifndef _GLOBAL_H
#define _GLOBAL_H
#include "util_a.h"
#include "util_b.h"
#endif