如果#include无法找到文件会发生什么

what happens if an #include fails to find file

本文关键字:什么 文件 #include 如果      更新时间:2023-10-16

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

myCode.cpp:

#include <library1.h>
#include <library2.h>
int main() {
 // use some methods from library2
}

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

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

如果找不到特定的#include文件,则编译失败并停止并出现错误。编译无法继续。

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

#include指令应该标识一个头文件或源文件,这个头文件或源文件可以被实现处理。

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

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