C++转到(而不是继续)语法上的奇怪之处

C++ goto (rather than continue) syntactic oddity

本文关键字:语法 转到 继续 C++      更新时间:2023-10-16

我有以下代码:

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;"?

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

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

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