C++ 编译器说它找不到文件,但在“中”报告错误;“未找到”;文件
我有两个短文件位于同一目录中。每一项的内容如下所示C++ 编译器说它找不到文件,但在“中”报告错误;“未找到”;文件,c++,compiler-errors,compilation,include,C++,Compiler Errors,Compilation,Include,我有两个短文件位于同一目录中。每一项的内容如下所示 文件test.cpp包含: int main() { #include <test.h> } syntax_error 在使用g++或clang++编译test.cpp时,我得到了预期的错误 test.cpp:3:11: error: 'test.h' file not found with <angled> include; use "quotes" instead #include &l
- 文件
包含:test.cpp
int main() { #include <test.h> }
syntax_error
g++
或clang++
编译test.cpp
时,我得到了预期的错误
test.cpp:3:11: error: 'test.h' file not found with <angled> include; use
"quotes" instead
#include <test.h>
^~~~~~~~
"test.h"
基本上,第一个错误报告编译器找不到文件test.h
,第二个错误报告编译器报告找不到的文件中的语法错误
这是唯一产生的两个错误
我理解编译器报告第一个错误的原因,在这种情况下,我应该使用带有
#include
的引号。但是,为什么编译器在明确找到文件后却说找不到该文件?而且,为什么它会继续报告“未找到”文件中的错误?这是一个功能,而不是一个bug
其思想是,如果错误很小(如缺少分号),那么编译器将尝试继续编译,就像您已经修复了错误一样。这使您能够一次性修复多个错误。当编译代码需要很长时间时,这尤其有用
想象一下,修复一个丢失的分号,重新编译五个小时,以便编译器找到另一个丢失的分号。然后你必须重新编译。那会很令人沮丧,不是吗
基本上,编译器将尽可能地从任何错误中恢复,以便能够报告尽可能多的错误。大多数编译器对此都有标记
但是,为什么编译器在明确找到文件后却说找不到该文件
编译器发现文件是的,这就是为什么它提示您使用“
而不是
。如果没有,它可能不会给你暗示。尽管如此,编译器还是不允许正确编译代码,因为您的代码格式不正确
作为类比,仅仅因为编译器发现了一个缺少的分号,这并不意味着它就可以用这个缺少的字符编译代码(如果它试图符合标准的话)。但是,它将恢复并尝试查找其他错误(如果有)。这是一项功能,而不是一个bug 其思想是,如果错误很小(如缺少分号),那么编译器将尝试继续编译,就像您已经修复了错误一样。这使您能够一次性修复多个错误。当编译代码需要很长时间时,这尤其有用 想象一下,修复一个丢失的分号,重新编译五个小时,以便编译器找到另一个丢失的分号。然后你必须重新编译。那会很令人沮丧,不是吗 基本上,编译器将尽可能地从任何错误中恢复,以便能够报告尽可能多的错误。大多数编译器对此都有标记 但是,为什么编译器在明确找到文件后却说找不到该文件 编译器发现文件是的,这就是为什么它提示您使用
“
而不是
。如果没有,它可能不会给你暗示。尽管如此,编译器还是不允许正确编译代码,因为您的代码格式不正确
作为类比,仅仅因为编译器发现了一个缺少的分号,这并不意味着它就可以用这个缺少的字符编译代码(如果它试图符合标准的话)。但是,它将恢复并尝试查找其他错误(如果有)。第一条消息非常简单:它说,“我找到了它,但在错误的位置。请使用引号,Luke。”看起来你不小心使用了
。相关:感谢链接,尽管我熟悉之间的区别,但我并不好奇<代码>
具有实现定义的行为。这个特定的实现也会在本地文件夹中查找,它会告诉您您的程序不兼容,原因以及如何修复它,然后开始查找更多错误。如果您仔细阅读,消息并不是说找不到该文件,而是说在一个
搜索路径中找不到该文件。如果根本找不到它,你会得到一条不同的消息。第一条消息很简单:它说,“我找到了它,但在错误的地方。使用引号,卢克。”看起来你不小心使用了
。相关:感谢链接,尽管我熟悉和include之间的区别,但我并不好奇<代码>
具有实现定义的行为。这个特定的实现也会在本地文件夹中查找,它会告诉您您的程序不兼容,原因以及如何修复它,然后开始查找更多错误。如果您仔细阅读,消息并不是说找不到该文件,而是说在一个
搜索路径中找不到该文件。如果根本找不到,你会收到另一条信息。
In file included from test.cpp:3:
./test.h:1:1: error: use of undeclared identifier 'syntax_error'
syntax_error
^