【发布时间】:2018-03-22 15:20:04
【问题描述】:
这是来自Google's C++ style guide 的关于#include 的部分:
在dir/foo.cc或dir/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 省略了任何必要的 包括, dir/foo.cc 或 dir/foo_test.cc 的构建将中断。因此, 此规则确保构建中断首先出现在人们面前 处理这些文件,而不是为其他包中的无辜者。
最后一行没看懂:
因此,此规则确保构建中断首先显示给人们 处理这些文件,而不是为其他包中的无辜者。
有人能解释一下如何将dir2/foo2.h 放在首位会导致“良好”的构建中断,以及将dir2/foo2.h 放在最后会如何导致“糟糕”的构建中断?
【问题讨论】:
-
我认为他们只是意味着从事它工作的人可能已经包含了一个包含,所以即使它不在目标文件包含中,它也适用于他们..但可能会破坏你您只包含该模块的标头...并且通过这种方式对其进行结构化,它将破坏维护者,因为它们首先包含 dir2/foo2.h
-
这实际上是在您的标头中隐藏缺少的包含,因此这似乎不是一个好主意。
-
不小心依赖出现在另一个 .h 文件中的声明是一个非常常见的错误。把它放在第一位你不会注意到。标准 C++ 有这个问题,iostream 相当臭名昭著。
-
如果您的标头忘记包含相关标头,那么您的测试程序就是垃圾。与其提出晦涩难懂的编码风格规则,不如改进单元测试代码的方式。它是行业事实上的标准,包括进入 header 文件而不是其他任何地方,因此代码的用户可以轻松地获得所有代码依赖项的概述。他们不应该去挖掘
*.c*文件——他们甚至可能无法访问它们!使用带有良好单元测试的行业事实标准编码,而不是带有糟糕单元测试的 Google-mumbo-jumbo 标准。 -
@Lundin:“这是行业事实上的标准,包括进入头文件而没有其他地方”什么?绝对不是这种情况,除非您想要疯狂的编译时间和增量构建,从而重建您的整个应用程序。
标签: c++ c header-files