Google C++ 风格指南包含顺序
Google C++ Style Guide include order
Google C++ Style Guide 建议按以下顺序将 header 文件 (.h) 包含到实现文件 (.cpp, .cc) 中:
In dir/foo.cc
or dir/foo_test.cc
, whose main purpose is to implement or test the stuff in dir2/foo2.h
, order your includes as follows:
dir2/foo2.h.
A blank line
C system files.
C++ system files.
A blank line
Other libraries' .h files.
Your project's .h files.
如前所述,这样的顺序允许在编译 foo
单元时看到 dir2/foo2.h
中省略的依赖项,而不是其他无辜的单元。似乎很符合逻辑。
但为什么 Other libraries' .h files.
和 Your project's .h files.
放在列表的末尾?从理论上讲,也可能存在缺失的依赖项,这些依赖项将通过在之前包含 C system files.
和 C++ system files.
来隐藏。
也许假设其他(header)文件问题应该在相关的实现文件中检测到?在那种情况下,header-only 图书馆呢?
换句话说,将包含以下顺序:
dir2/foo2.h.
A blank line
Other libraries' .h files.
Your project's .h files.
A blank line
C system files.
C++ system files.
更快地找到隐藏的依赖项会更好吗?
例如,如果我只有 header 需要 <stdio.h>
(但未在该文件中指定)。使用 Google 命令直接或间接包含 <stdio.h>
的概率高于在最后一步包含系统文件时的概率(正如我之前建议的那样)。因此,找到隐藏依赖项的可能性很低。那么,如果在其他 lib/your 项目文件之前包含系统文件,我们将获得什么?
还不清楚,我是否应该在其他(用户定义的)header 文件中使用推荐的包含文件顺序。
要包含的 C 和 C++ header 文件是下面源代码使用的文件,它们不应涵盖其他库或项目的 header 文件的依赖项。
而header只有模板之类的模块:你确实为你的模块写了一个测试程序,对吧?首先在测试程序中包含模板 header 文件,然后您也可以在那里检测缺少的包含。
每个 header 文件(h、hpp、...)都应该有一个实现文件(cpp、cc、...),其中包含的顺序与问题中指定的顺序相同。 (即使实现文件是空的,除了这1个include)
所以就像 "Your" header 首先包含在 "Your" 实现文件中一样,所以每个 "other" header 文件都应该首先包含在 "other"实现文件。
这样,如果 "other" header 不包含必需的 header,"other" 实现文件将不会编译。
Google C++ Style Guide 建议按以下顺序将 header 文件 (.h) 包含到实现文件 (.cpp, .cc) 中:
In
dir/foo.cc
ordir/foo_test.cc
, whose main purpose is to implement or test the stuff indir2/foo2.h
, order your includes as follows:dir2/foo2.h. A blank line C system files. C++ system files. A blank line Other libraries' .h files. Your project's .h files.
如前所述,这样的顺序允许在编译 foo
单元时看到 dir2/foo2.h
中省略的依赖项,而不是其他无辜的单元。似乎很符合逻辑。
但为什么 Other libraries' .h files.
和 Your project's .h files.
放在列表的末尾?从理论上讲,也可能存在缺失的依赖项,这些依赖项将通过在之前包含 C system files.
和 C++ system files.
来隐藏。
也许假设其他(header)文件问题应该在相关的实现文件中检测到?在那种情况下,header-only 图书馆呢?
换句话说,将包含以下顺序:
dir2/foo2.h. A blank line Other libraries' .h files. Your project's .h files. A blank line C system files. C++ system files.
更快地找到隐藏的依赖项会更好吗?
例如,如果我只有 header 需要 <stdio.h>
(但未在该文件中指定)。使用 Google 命令直接或间接包含 <stdio.h>
的概率高于在最后一步包含系统文件时的概率(正如我之前建议的那样)。因此,找到隐藏依赖项的可能性很低。那么,如果在其他 lib/your 项目文件之前包含系统文件,我们将获得什么?
还不清楚,我是否应该在其他(用户定义的)header 文件中使用推荐的包含文件顺序。
要包含的 C 和 C++ header 文件是下面源代码使用的文件,它们不应涵盖其他库或项目的 header 文件的依赖项。
而header只有模板之类的模块:你确实为你的模块写了一个测试程序,对吧?首先在测试程序中包含模板 header 文件,然后您也可以在那里检测缺少的包含。
每个 header 文件(h、hpp、...)都应该有一个实现文件(cpp、cc、...),其中包含的顺序与问题中指定的顺序相同。 (即使实现文件是空的,除了这1个include)
所以就像 "Your" header 首先包含在 "Your" 实现文件中一样,所以每个 "other" header 文件都应该首先包含在 "other"实现文件。
这样,如果 "other" header 不包含必需的 header,"other" 实现文件将不会编译。