一直以为C语言头文件的作用和 java中的import,php中的import是一样的,是引入方法的作用,但这是错的。
找了很多资料,终于找到一个正确的解读:
C++/C编译器在扫描到一条函数调用语句时首先应当知道该函数的原型或定义,函数原型一般都放在头文件中,函数定义则放在源文件中,当源文件或头文件通过#include指令包含另一个头文件的时候,编译预处理器用头文件的内容取代#include伪指令。这就是说,头文件的所有内容最终都会被合并到某一个或某几个源文件中,如此将每一个包含的头文件递归地展开后形成的源文件就叫编译单元。
(1)通过头文件来调用库功能。在很多场合,源代码不便(或不准)向用户公布,只要向用户提供头文件和二进制的库即可。用户只需按照头文件中的接口声明来调用库函数,而不必关心接口是怎么实现的。连接器会从库中提取相应的代码,并和用户的程序连接生成可执行文件或者动态连接库文件;
(2)头文件能加强类型安全检查(不是引入方法)。如果某个接口被实现或被使用时的方式与头文件中的声明不一致,编译器就会指出错误,这一简单的规则能大大减轻程序员调试、改错的负担;
(3)头文件可以提高程序的可读性(清晰性)。
这种模块化的含义,是能够单独编译,减少编译时间,只编译有改动的文件。所以说在编译的时候,不能单单的 gcc main.c 就万事大吉了
还要编译你用到的源文件 gcc main.c XXX.c 等,他不会自动去寻找需要的源文件。