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

Rob*_*ahy 1 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);
Run Code Online (Sandbox Code Playgroud)

哪个不编译(VC++ 2010)有这个错误:

file_system_helpers.cpp(109) : error C2143: syntax error : missing ';' before '}'
Run Code Online (Sandbox Code Playgroud)

如果我将其更改为:

skip_increment:

1;
Run Code Online (Sandbox Code Playgroud)

它编译(并且有效).

这真的是C++语法的限制吗?

ara*_*nid 6

我假设"1;" 应该是你的第一个代码片段中缺少的?

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

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

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

  • 将代码位提取到函数中并使用早期返回. (2认同)