我有以下代码:
do
{
doStuffP1();
if (test)
{ goto skip_increment;
}
dostuffP2();
skip_increment:
// 1; // Only works if I remove the comment at line start.
} while (loop);
使用此错误编译(VC ++ 2010):
file_system_helpers.cpp(109) : error C2143: syntax error : missing ';' before '}'
如果我将其更改为:
skip_increment:
1;
它编译(并且有效)。
这真的是C ++语法的限制吗?
答案 0 :(得分:6)
我假设“1;”应该从你的第一个代码片段中遗漏?
在这里查看这个语法:http://www.lysator.liu.se/c/ANSI-C-grammar-y.html
这仅将标签定义为“标签声明”。也就是说,块体可以在其内容序列中的任何位置包含label: <statement>
,但标签之后的语句不是可选的。因此,这会使skip_increment: }
无效。
(而且,好吧,你使用的是C ++,而不是C;但是我怀疑是否允许额外使用goto是在定义C ++语言时有人关心的。)