C ++转到(而不是继续)语法奇怪

时间:2012-01-19 03:50:44

标签: c++ goto

我有以下代码:

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 ++语法的限制吗?

1 个答案:

答案 0 :(得分:6)

我假设“1;”应该从你的第一个代码片段中遗漏?

在这里查看这个语法:http://www.lysator.liu.se/c/ANSI-C-grammar-y.html

这仅将标签定义为“标签声明”。也就是说,块体可以在其内容序列中的任何位置包含label: <statement>,但标签之后的语句不是可选的。因此,这会使skip_increment: }无效。

(而且,好吧,你使用的是C ++,而不是C;但是我怀疑是否允许额外使用goto是在定义C ++语言时有人关心的。)