0

编译器是否提供自动检查每个源文件(及其关联的头文件,如果有)是否包含所有其他所需头文件的功能?或者至少发出警告,例如,如果未明确包含所需的标头?

例如,我希望编译器在我执行以下操作时报告:

header1.h

#include <string>
...

header2.h

#include "header1.h"
#include <iostream>
std::string blah;    //<-- issue warning here, <string> not included explicitly
...

源代码2.cpp

#include "header2.h"
...
cout << endl;        //<-- issue warning here, <iostream> not included explicitly

我正在使用 g++ 和 Visual Studio,所以我的问题主要适用于这些编译器。谢谢!

4

1 回答 1

0

据我所知,没有自动的方法可以这样做。

我的建议是仅将包含在头文件中的内容限制为 .h 在 C++ 编码标准(Sutter,Alexandrescu)中定义的“接口”所需的内容,您可以找到一个明确解决此问题的项目(标题为 Make header files self-sufficient )。我引用:

负责任地行事:确保您编写的每个标头都是可独立编译的,方法是让它包含其内容所依赖的任何标头

但不要包含您不需要的标题;他们只是创建了杂散的依赖关系。考虑使用这种技术来帮助实施标头自给自足:在您的构建中,单独编译每个标头并验证没有错误或警告。

此外,您应该始终首先包含您自己的 .h,因为这样可以最大限度地提高发现是否存在包含错误的可能性。

在所有情况下,标题都应该是可交换的,因此如果您的文件包含 ah 和 bh,则两个可能的命令都应该这样做。

于 2013-07-10T11:10:57.617 回答