头文件
-
用
.cc命名源文件,.h命名头文件 -
在头文件的定义里,需要根据路径写好 header guard:
假设 foo 项目中头文件
foo/src/bar/baz.h应该有如下的 header guard1
2
3
4
5
6
// ...... -
不要依赖间接导入.例如如果
foo.cc需要bar.h中的符号,无论foo.h是否导入了bar.h,都应该在foo.cc里导入bar.h -
避免使用前向声明.
前向声明 (forward declaration) 是没有对应定义 (definition) 的声明.
#include 的顺序头文件的路径应相对于项目源码目录, 不能出现 UNIX 目录别名 (alias).例如, 应该按如下方式导入 google-awesome-project/src/base/logging.h:
1 |
在 dir/foo.cc 或 dir/foo_test.cc 这两个实现或测试 dir2/foo2.h 内容的文件中, 按如下顺序导入头文件:
dir2/foo2.h- 空行
- C 语言系统文件 (确切地说: 用使用方括号和
.h扩展名的头文件), 例如<unistd.h>和<stdlib.h>. - 空行
- C++ 标准库头文件,例如
<algorithm>和<cstddef>. - 空行
- 其他库的
.h文件 - 空行
- 本项目的
.h文件
命名空间
【内部链接】:将函数标记为 static,或者将其放在 unnamed namespace 里可以把它对外隐藏.建议只在 .cc 源文件里这么做,而不要在 .h 头文件里搞.