2

Google C++ Style Guide建议按以下顺序将头文件 (.h) 包含到实现文件 (.cpp, .cc) 中:

dir/foo.ccordir/foo_test.cc中,其主要目的是实现或测试中的东西dir2/foo2.h,按如下顺序排列您的包含:

dir2/foo2.h.
A blank line
C system files.
C++ system files.
A blank line
Other libraries' .h files.
Your project's .h files.

如前所述,这样的顺序允许在dir2/foo2.h编译foo-unit 时查看省略的依赖项,而不是其他无辜单元。看起来很合乎逻辑。

但是为什么Other libraries' .h files.Your project's .h files.放在了列表的末尾呢?理论上,也可能缺少依赖项,这些依赖项将通过包含C system files.and C++ system files.before 来隐藏。

也许假设应该在相关的实现文件中检测到其他(头)文件问题?在那种情况下,只有头文件的库呢?

换句话说,是否会包含以下顺序:

dir2/foo2.h.
A blank line
Other libraries' .h files.
Your project's .h files.
A blank line
C system files.
C++ system files.

更快地找到隐藏的依赖项会更好吗?

例如,如果我只有需要的标题<stdio.h>(但未在该文件中指定)。使用谷歌命令,直接或间接包含的可能性<stdio.h>比在最后一步包含系统文件时更高(正如我之前建议的那样)。因此,找到隐藏依赖项的概率很低。那么,如果在其他 lib/您的项目文件之前包含系统文件,我们将获得什么?

同样不清楚,我是否应该在其他(用户定义的)头文件中使用推荐的包含文件顺序。

4

2 回答 2

2

每个头文件(h,hpp,...)都应该有一个实现文件(cpp,cc,...),其中包含的顺序与问题中指定的顺序相同。(即使实现文件是空的,除了这1个包含)

所以就像“Your”头文件首先包含在“Your”实现文件中一样,每个“other”头文件都应该首先包含在“other”实现文件中。

这样,如果“其他”标头不包含必需的标头,则“其他”实现文件将无法编译。

在此处输入链接描述

于 2019-01-24T14:18:27.697 回答
-1

要包含的 C 和 C++ 头文件是下面源代码使用的头文件,它们不应涵盖其他库或项目头文件的依赖关系。

像模板这样的只有标题的模块:你确实为你的模块编写了一个测试程序,对吧?首先在测试程序中包含模板头文件,然后您也可以在其中检测缺少的包含。

于 2019-01-24T13:54:56.933 回答