有没有办法用g++
编译源代码,如果我没有将文件包含在我应该拥有的另一个文件中,编译器会发出警告?
例如,在一个大型项目中,在fileA
中编写一些代码通常很容易,它使用fileC
中的另一个函数(包含函数声明),但忘记添加include声明。如果fileA
还包含其他文件fileB
,其中fileB
包含fileC
,则可以隐藏此类错误。
然后编译时会没有错误,但是如果代码在以后被修改,我们从#include fileB.hpp
删除fileA
,那么编译将失败,因为我们最初忘记包含{{ 1}}很久以前!
是否有编译器开关会警告我们这个问题?同样,是否有反向开关,当我们fileC
不必要的东西时,它会警告我们?
答案 0 :(得分:3)
不完全回答这个问题,但使用前向声明并将标题中的包含保持在最小值可能有助于避免此类问题。
如果你只在你的hpp文件中使用前向声明,它们将彼此独立,你将被迫将特定的.hpp文件包含到正在编译的每个.cpp单元中。
答案 1 :(得分:2)
我不相信有这样的选择,因为实际上它实际上很难实现。编译器应该如何知道哪个头文件没有被包含(假设你在一个头文件中有一个免费模板函数而在另一个头文件中有一个专门化的情况)。
但不要害怕,实际上这不是什么大问题。如果你永远不删除fileB
的包含,你的代码将继续编译就好了,如果你做删除它,你会立即收到一个方便的错误,告诉你确切的标识符是什么缺少,让你在那个时候自己包括合适的标题!