0

假设我有这个非常基本的 C++ 代码:

我的代码.cpp:

#include <library1.h>
#include <library2.h>

int main() {
 // use some methods from library2
}

如果我编译这段代码但我的编译器找不到 library1.h 会发生什么?它会抛出任何特定的错误吗?它还会寻找 library2.h 吗?它会跳过其余的#include 语句并继续编译 main 吗?我之所以问,是因为我试图回答这个 SO 问题,其中添加一个 .h 文件会导致编译器抱怨没有从另一个 .h 文件中找到方法。如果没有#include first .h 行,代码可以正确编译。

4

3 回答 3

3

当编译器遇到包含错误时,它会报告它并停止编译。当然,并非所有编译器都会报告人类友好的错误,但可以肯定的是,它们都会终止,因为这个错误是致命的,正如 syam 在他的评论中指出的那样。

于 2013-06-13T20:04:26.583 回答
2

#include如果找不到特定文件,则编译失败并因错误而停止。编译无法继续进行。

有趣的是,没有明确指定缺少标头时的行为。标准中唯一相关的部分是16.2/1 [cpp.include]

#include指令应标识可由实现处理的头文件或源文件。

注意 should 的使用,给编译器没有选择:它必须用文件的内容替换#include指令。如果文件不存在,则程序格式错误。

于 2013-06-13T20:04:59.717 回答
0

准确地说,如果它找不到该文件,那么如果需要正确运行您的代码,编译器将无法运行该程序。如果您的代码访问该文件中的某些内容,则程序将不会按需要运行。

于 2013-06-15T22:07:20.293 回答