g++:有没有办法警告头文件是否不包含在文件中

g++: Is there a way to warn if header file is not included in file?

本文关键字:文件 是否 包含 有没有 警告 g++      更新时间:2023-10-16

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

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

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

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

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

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

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

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