在C语言家族程序中,头文件被大量使用。一般而言,每个C++/C程序通常由头文件(header files)和定义文件(definition files)组成。头文件作为一种包含功能函数、数据接口声明的载体文件,主要用于保存程序的声明(declaration),而定义文件用于保存程序的实现 (implementation)。 .c/.cpp就是你写的程序文件。
头文件的主要作用在于多个代码文件全局变量(函数)的重用、防止定义的冲突,对各个被调用函数给出一个描述,其本身不需要包含程序的逻辑实现代码,它只起描述性作用,用户程序只需要按照头文件中的接口声明来调用相关函数或变量,链接器会从库中寻找相应的实际定义代码。
头文件的作用
- 编写一个源程序时,可以将变量与函数的声明单独写到一个头文件里,这样方便代码的维护。例如c++类的声明就一般写在头文件里。
- 编写的源程序可以通过头文件来调用其他源文件里的函数,例如调用库文件,具体的实现则是通过链接器完成的。
头文件与库文件的区别
简单来说:库文件通过头文件向外导出接口。链接器通过头文件找到库文件。头文件进行函数的申明,库文件实现函数的定义。比如,printf函数。使用时应包括stdio.h,打开stdio.h你只能看到,printf这个函数的申明,却看不到printf具体是怎么实现的,而函数的实现在相应的C库中。而库文件一般是以二进制形式而不是C源文件形式提供给用户使用的。程序中包括了stdio.h这个头文件。链接器就能根据头件中的信息找到printf这个函数的实现并链接进这个程序代码段里。函数实现的代码从而把这段代码链接到用户程序中去。
下图是VC++6.0里的文件。
使用头文件
通过#include来使用头文件,#include "xxx.h",或者#include <xxx.h>。
尖括号:仅指向内置的头文件(编译器的类库路径里面的头文件)。
双引号:优先指向项目的当前目录中自己写的头文件,如果没有,再指向内置的头文件。
#include一般用在C、C++等语系的编译环境中,这条语句的作用是在此处插入一堆代码,这堆代码在另一个文件里。
补充
编译链接的基本过程:
- 编译阶段:编译器将include指令全部进行处理,将相关的代码插入到其中,其中对于只有函数声明,而没有函数实现的,就会将这个函数符号存放到一张表中。
- 链接阶段:链接器会去其他的目标文件去找这个函数符号的定义,一旦找到了,可执行文件就顺利生成了。
详细过程可以参考这篇博文:http://blog.csdn.net/nicky_zs/article/details/2166048