#define:
所有头文件都应该使用 #define 来防止头文件被多重包含,命名格式当是:<PROJECT>_<PATH>_<FILE>_H_为保证唯一性, 头文件的命名应该基于所在项目源代码树的全路径。
例如: 项目foo中的头文件foo/src/bar/baz.h 可按如下方式保护:
#ifndef FOO_BAR_BAZ_H_
#define FOO_BAR_BAZ_H_ # 这里定义各种函数
... #endif // FOO_BAR_BAZ_H_
前置声明:
含义:类、函数和模板的纯粹声明,没伴随着其定义。
优点:
前置声明能够节省编译时间,多余的 #include 会迫使编译器展开更多的文件,处理更多的输入。
前置声明能够节省不必要的重新编译的时间,#include使代码因头文件中无关的改动而被重新编译多次。
缺点:
前置声明隐藏了依赖关系,头文件改动时,用户的代码会跳过必要的重新编译过程;
前置声明可能会被库的后续更改所破坏,前置声明函数或模板有时会妨碍头文件开发者变动其 API.
前置声明来自命名空间std::的symbol时,其行为未定义。如在main.cpp中前置声明的std::cout,而不能在头文件直接使用。
#include 的路径及顺序:
使用标准的头文件包含顺序可增强可读性, 避免隐藏依赖: