目录
每个C++/C 程序通常分为两个文件。一个文件用于保存程序的声明(declaration),称为头文件。另一个文件用于保存程序的实现(implementation),称为定义(definition)文件。C++/C 程序的头文件以“.h”为后缀,C 程序的定义文件以“.c”为后缀,C++程序的定义文件通常以 “.cpp”为后缀(也有一些系统以“.cc”或“.cxx”为后缀)。对于 DLL 文件,通常还包括“.def”文件。
头文件和 C 程序文件中都必须包含版权和版本的声明。
版权和版本的声明位于头文件和定义文件的开头(参见示例 1-1),主要内容有:
1. 版权信息。
2. 文件名称、标识符、摘要。
3. 当前版本号、作者/修改者、完成日期。
4. 版本历史信息。
示例1‑1版权和版本的声明范例
头文件的作用:通过头文件来调用库功能。在很多场合,源代码不便(或不准)向用户公布,只要向用户提供头文件和二进制的库即可。用户只需要按照头文件中的接口声明来调用库功能,而不必关心接口怎么实现的。编译器会从库中提取相应的代码。头文件能加强类型安全检查。如果某个接口被实现或被使用时,其方式与头文件中的声明不一致,编译器就会指出错误,这一简单的规则能大大减轻程序员调试、改错的负担。
1. 头文件必须包含下列内容:
1.1. 头文件开头处的版权和版本声明。
1.2. 预处理块。
1.3. 函数和类结构声明等。
2. 正确使用预处理块:为了防止头文件被重复引用,应当用 ifndef/define/endif 结构产生预处理块。
3. 正确引用头文件的格式:用 #include <filename.h> 格式来引用标准库的头文件(编译器将从标准库目录开始搜索),用 #include “filename.h” 格式来引用非标准库的头文件(编译器将从用户的工作目录开始搜索)。
4. 头文件中只存放“声明”而不存放“定义”
5. 在 C++ 语法中,类的成员函数可以在声明的同时被定义,并且自动成为内联函数。这虽然会带来书写上的方便,但却造成了风格不一致,弊大于利。建议将成员函数的定义与声明分开,不论该函数体有多么小。
6. 不提倡使用全局变量,尽量不要在头文件中出现像 extern int value 这类声明。
示例1‑2 C++/C 头文件的结构范例
7. 定义文件的书写格式:必须包含三部分内容:
7.1. 定义文件开头处的版权和版本声明;
7.2. 对一些头文件的引用;
7.3. 程序的实现体(包括数据和代码)。
假设定义文件的名称为 graphics.cpp,定义文件的典型结构为:
示例1‑3 C++/C 定义文件的结构范例