头文件的用途和结构
早期的编程语言如BASIC、Fortran没有头文件的概念,C++/C语言的初学者虽然会使用头文件,但常常不明其理。这里对头文件的作用略做解释。
【提示10-2】:
(1)通过头文件来调用库功能。在很多场合,源代码不便(或不准)向用户公布,只要向用户提供头文件和二进制的库即可。用户只需按照头文件中的接口 声明来调用库函数,而不必关心接口是怎么实现的。连接器会从库中提取相应的代码,并和用户的程序连接生成可执行文件或者动态连接库文件;
(2)头文件能加强类型安全检查。如果某个接口被实现或被使用时的方式与头文件中的声明不一致,编译器就会指出错误,这一简单的规则能大大减轻程序员调试、改错的负担;
(3)头文件可以提高程序的可读性(清晰性)。
头文件中的元素比较多,其顺序(结构)一般应安排如下:
(1)头文件注释(包括文件说明、功能描述、版权声明等)(必须有);
(2)内部包含卫哨开始(#ifndef XXX/#define XXX)(必须有);
(3)#include其他头文件(如果需要);
(4)外部变量和全局函数声明(如果需要);
(5)常量和宏定义(如果需要);
(6)类型前置声明和定义(如果需要);
(7)全局函数原型和内联函数的定义(如果需要);
(8)内部包含卫哨结束:#endif // XXX(必须有);
(9)文件版本及修订说明。
上述排列顺序并非绝对,也不存在对错之分,可根据具体情况灵活安排。
如果程序中需要内联函数,那么内联函数的定义应当放在头文件中,因为内联函数调用语句最终被扩展开来而不是采用真正的函数调用机制