当前,当我在 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++ 是否如此核心以至于编译器别无选择,只能在这里报告三个错误?
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.
诊断消息的质量因编译器而异。
C++ 是否有可能有更好的错误报告,还是 C++ 如此核心以至于编译器别无选择,只能在这里报告三个错误?
在某种程度上,是的(请参阅詹姆斯回答中的 clang 输出)。编译器的错误恢复技术决定了它如何报告错误。 (有点旧)gcc或msvc似乎不关心错误恢复,而是继续解析源代码的其余部分,导致后续错误成为噪音而不是真正的错误。 clang 在这种情况下要好得多。请参阅此帖子。