C++ 中是否可以提供更好的错误报告?

问题描述 投票:0回答:2

当前,当我在 Visual C++ 10 中编译此代码时:

Undeclared var;

编译器发出以下错误消息:

error C2065: 'CUndeclared' : undeclared identifier
error C2146: syntax error : missing ';' before identifier 'var'
error C2065: 'var' : undeclared identifier

只有第一个是有帮助的,其余的只会增加输出中的噪音。现在我明白,也许生成更漂亮的错误消息并不是编译器开发中的首要任务。

我想知道的是 - C++ 是否有可能有更好的错误报告,或者 C++ 是否如此核心以至于编译器别无选择,只能在这里报告三个错误?

c++ visual-c++ compiler-errors
2个回答
5
投票

g++ 4.5.1 报告:

Z:\dev>g++ x.cpp
x.cpp:1:1: error: 'Undeclared' does not name a type

clang 3.0(中继133044)报告:

Z:\jm\dev>clang x.cpp
x.cpp:1:1: error: unknown type name 'Undeclared'
Undeclared var;
^
1 error generated.

诊断消息的质量因编译器而异。


1
投票

C++ 是否有可能有更好的错误报告,还是 C++ 如此核心以至于编译器别无选择,只能在这里报告三个错误?

在某种程度上,是的(请参阅詹姆斯回答中的 clang 输出)。编译器的错误恢复技术决定了它如何报告错误。 (有点旧)gcc或msvc似乎不关心错误恢复,而是继续解析源代码的其余部分,导致后续错误成为噪音而不是真正的错误。 clang 在这种情况下要好得多。请参阅帖子。

© www.soinside.com 2019 - 2024. All rights reserved.