Self-contained 头文件
头文件应该能够自给自足(self-contained,也就是可以作为第一个头文件被引入),以 .hpp 结尾。至于用来插入文本的文件,说到底它们并不是头文件,所以应以 .inc 结尾。不允许分离出 -inl.h 头文件的做法.
#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.
- 类模板:优先使用 #include.
内联函数
只有当函数只有 10 行甚至更少时才将其定义为内联函数.
#include 的路径及顺序
使用标准的头文件包含顺序可增强可读性, 避免隐藏依赖: 相关头文件 > C 库 > C++ 库 > 其他库的 .h > 本项目内的 .h.
例外:
有时,平台特定(system-specific)代码需要条件编译(conditional includes),这些代码可以放到其它 includes 之后。当然,您的平台特定代码也要够简练且独立,比如:
#include "foo/public/fooserver.h"
#include "base/port.h" // For LANG_CXX11.
#ifdef LANG_CXX11
#include <initializer_list>
#endif // LANG_CXX11