有没有办法用
g++
编译源代码,并且如果我没有将文件包含在我应该包含的另一个文件中,让编译器警告我?
例如,在大型项目中,通常很容易在
fileA
中编写一些代码,它使用 fileC
中的另一个函数(包含函数声明),但忘记添加 include 语句。如果 fileA
还包含另一个文件 fileB
,则可以隐藏此类错误,其中 fileB
包含 fileC
。
这将编译没有错误,但是如果稍后修改代码,并且我们从
#include fileB.hpp
中删除 fileA
,那么编译将失败,因为我们最初在几个月前忘记包含 fileC
!
是否有一个编译器开关会警告我们这个问题?同样,是否有反向开关,当我们
#include
做一些不必要的事情时,它会警告我们?
不完全回答问题,但使用前向声明并尽量减少标头中的包含可能有助于避免此类问题。
如果您仅在 hpp 文件中使用前向声明,它们将彼此独立,并且您将被迫将特定的 .hpp 文件包含到正在编译的每个 .cpp 单元中。
我不相信有这样的选择,因为实际上来说它很难实施。编译器如何知道不包含哪个头文件(考虑这样一种情况,一个标头中有一个免费模板函数,而另一个标头中有一个专门化)。
但是不用担心,实际上这没什么大不了的。如果你从不删除
fileB
的包含,你的代码将继续编译得很好,如果你 do 删除它,你会立即得到一个方便的错误,准确地告诉你缺少哪个标识符,使你能够包含那时你自己就可以找到正确的标题!