Google C ++样式指南包含顺序

时间:2019-01-24 13:29:42

标签: c++ include google-style-guide

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

  

dir/foo.ccdir/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中省略的依赖项。看起来很合逻辑。

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

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

换句话说,将包括以下顺序:

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>的标头(但在该文件中未指定)。使用Google顺序,直接或间接包含<stdio.h>的概率要比最后一步包含系统文件时高(如我之前所建议)。因此,发现隐藏依赖性的可能性很小。那么,如果在其他lib /您的项目文件之前包含系统文件,我们将赢得什么呢?

还不清楚,我应该在其他(用户定义的)头文件中使用推荐的包含文件顺序吗?

2 个答案:

答案 0 :(得分:2)

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

因此,就像“您的”标头首先包含在“您的”实现文件中一样,因此每个“其他”标头文件也应首先包含在“其他”实现文件中。

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

enter link description here

答案 1 :(得分:-1)

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

只有标头的模块(如模板):您确实为模块编写了一个测试程序,对吗?首先在测试程序中包含模板头文件,然后您也可以在其中检测到缺少的头文件。