1

有没有办法用 编译源代码g++,如果我没有在另一个文件中包含我应该包含的文件,编译器会警告我吗?

例如,在一个大型项目中,通常很容易在 中编写一些代码fileA,这些代码使用另一个函数 from fileC(其中包含函数声明),但忘记添加 include 语句。fileA如果还包含另一个文件,则可以隐藏此类错误fileB,其中fileB包含fileC.

然后编译不会出错,但是如果以后修改代码,并且我们删除#include fileB.hppfrom fileA,那么编译将失败,因为我们最初忘记包含fileC很多个月前!

是否有一个编译器开关会警告我们这个问题?#include同样,是否有反向开关,当我们有不必要的事情时它会警告我们?

4

2 回答 2

3

不完全回答这个问题,但使用前向声明并保持包含在标题中的最小可能有助于避免此类问题。

如果您只在 hpp 文件中使用前向声明,它们将相互独立,并且您将被迫将特定的 .hpp 文件包含到正在编译的每个 .cpp 单元中。

于 2013-09-04T18:30:09.363 回答
2

我不相信有这样的选择,因为实际上很难实施。编译器应该如何知道不包含哪个头文件(考虑一个头文件中有一个免费模板函数而另一个头文件中有一个特化的情况)。

但是不要害怕,实际上这没什么大不了的。如果您从不删除包含代码,fileB您的代码将继续正常编译,如果您删除它,您将立即收到一个方便的错误,准确告诉您缺少哪个标识符,使您能够自己包含正确的标头那时!

于 2013-09-04T18:35:22.687 回答