【发布时间】:2013-07-10 11:05:12
【问题描述】:
编译器是否提供自动检查每个源文件(及其关联的头文件,如果有)是否包含所有其他所需头文件的功能?或者至少发出警告,例如,如果未明确包含所需的标头?
例如,我希望编译器在我执行以下操作时报告:
header1.h
#include <string>
...
header2.h
#include "header1.h"
#include <iostream>
std::string blah; //<-- issue warning here, <string> not included explicitly
...
source2.cpp
#include "header2.h"
...
cout << endl; //<-- issue warning here, <iostream> not included explicitly
我正在使用 g++ 和 Visual Studio,所以我的问题主要适用于这些编译器。谢谢!
【问题讨论】:
-
编译器会告诉你,但不会告诉你你忘记包含一些特定的文件。您必须自己从错误消息中推断出这些信息。
-
当编译器看到
包含在 header1.h 中时,当您在 header2.h 中使用它时不会给出任何报告,因为您已经在 header2.h 中包含了 header1.h...我认为这样做是完全可以的,因为 C++ 不喜欢代码重复...... -
我想知道为什么有两个人对这个问题投了反对票。我希望 cmets 提供一些意见,说明他们为什么认为这个问题没有建设性。
-
设计头文件是很常见的,因此包含它们是在它们包含的其他一些头文件中进行声明的官方方式。以 g++ 的标准库为例,
string没有在<string>中声明,而是在<bits/basic_string.h>中声明。会有很多误报,或者你需要一种机制来避免它们...... -
@DanNestor 你的右伙伴,看起来反对投票是最新趋势......他们想在发布问题之前吓唬人......
标签: c++ visual-c++ gcc g++