今天在工作时,我和编译器又一次陷入了家务事之中,这个问题突然浮现在我的脑海中。尽管我因为在工作中不断按分号而得到了坚硬的小指,但我仍然在一个if
语句之前忘记了加上一个分号。显然,这导致了编译错误:
error C2143: syntax error : missing ';' before 'if'
于是我想:“那么,为什么你不能告诉我缺少分号的那一行呢?而非在问题之后再提示我。”接着我尝试着对其他类似的语法错误进行实验:
error C2065: 'myUndeclared' : undeclared identifier
error C2143: syntax error : missing ')' before 'if'
等等...
所有这些错误都会像之前那样把我带到问题之后的那一行,并抱怨if
语句之前的某些东西。
考虑以下情况:
SomeFunction(x) //Notice, there is no ';' here
if(bSomeCondition)
{
...
}
我遇到两个编译错误:
(第265行) error C2065: 'x' : 未声明的标识符
(第266行) error C2143: 语法错误 : 缺少“;”(在“if”之前)
然而,第一个错误正确告诉了我行号,尽管缺少分号。这使我认为编译器在解析时没有被绊倒,能够通过分号问题。那么为什么编译器坚持以这种“before”的方式报告语法错误呢?其他错误(非语法错误)报告的是它们所在的行。这是否与编译器进行多次通行有关?基本上,我希望有C++编译器工作知识的人可以具体解释编译器正在做什么,需要按照这种“before”方式报告错误。
;if
了吗? - Jonas Heidelberg