gpt4 book ai didi

c++ - 编译器说它找不到文件,但在 "unfound"文件中报告错误?

转载 作者:行者123 更新时间:2023-11-27 23:51:58 25 4
gpt4 key购买 nike

我在同一目录中有两个短文件。每个的内容如下所示。

  • 文件 test.cpp 包含:

    int main()
    {
    #include <test.h>
    }
  • 文件 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"

但是,我还遇到了第二个错误,这似乎与第一个错误相矛盾。

In file included from test.cpp:3:
./test.h:1:1: error: use of undeclared identifier 'syntax_error'
syntax_error
^

基本上,第一个错误报告编译器找不到文件 test.h,第二个错误报告编译器报告找不到文件中的语法错误。

这是仅有的两个错误。

我明白为什么编译器会报告第一个错误,并且在这种情况下我应该在 #include 中使用引号。但是,为什么编译器明明找到了文件却说找不到呢?而且,为什么它会继续报告“未找到”文件中的错误?

最佳答案

这是一个功能,不是错误。

这个想法是,如果错误是微不足道的(比如缺少分号),那么编译器将尝试继续编译,就好像您已经修复了错误一样。这使您能够一次性修复多个错误。这在编译代码需要很长时间时特别有用。

想象一下修复一个丢失的分号,重新编译五个小时,只是为了让编译器找到另一个丢失的分号。然后你必须再次重新编译。那会很令人沮丧,不是吗?

基本上,编译器会尽可能地尝试从任何错误中恢复,以便能够报告尽可能多的错误。大多数编译器都有一个标志。

Why, though, does the compiler say it cannot find the file when it clearly has found it?

编译器找到了该文件,这就是为什么它提示您使用 "" 的原因而不是 <> .如果没有,它可能不会给你提示。尽管如此,编译器仍无法正确编译您的代码,因为您的代码格式错误。

打个比方,仅仅因为编译器发现了一个缺失的分号,并不意味着它可以编译带有缺失字符的代码(如果它试图符合标准)。然而,它将恢复并尝试查找其他错误(如果有)。

关于c++ - 编译器说它找不到文件,但在 "unfound"文件中报告错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45762720/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com