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

C++ C++;转到(而不是继续)语法奇怪,c++,goto,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)

我有以下代码:

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

< P>我假设“1”应该从你的第一个代码片段中删除?

看看这里的语法:

这仅将标签定义为“标记语句”。也就是说,块体可以在其内容序列中的任何位置包含
标签:
,但标签后面的语句不是可选的。因此这将使
跳过增量:}
无效

((好,你使用C++而不是C;但是我怀疑是否允许Goto的额外用法是定义C++语言时所关心的事情))< /P> < P>我假定“1”应该从你的第一个代码片段中删除了?

看看这里的语法:

这仅将标签定义为“标记语句”。也就是说,块体可以在其内容序列中的任何位置包含
标签:
,但标签后面的语句不是可选的。因此这将使
跳过增量:}
无效


((好,你使用C++而不是C;但是我怀疑是否允许Goto的额外用法是定义C++语言时所关心的事情。)< /P>我认识到 Goto 几乎是普遍不赞成的,但是我没有看到优于<代码> >继续< /Cord>一个来自内部循环的外循环的方法。我能想到的唯一方法是使用一个额外的变量(一个

bool
来存储外部循环是否应该
继续
)。我认为使用一个额外的
bool
会比一个
goto
更好,但作为一个程序员,我还缺乏经验。我只是不相信
goto
本身会是一个安全的语句,而且额外的变量不会花费那么多,是吗?但那是我的2c。^^'将代码位提取到一个函数中,并使用提前返回。因此,使用额外的变量,引发堆栈缠绕/展开/将函数标记为
inline
,并希望编译器这样做,或者只使用
goto
。对
goto
的教条式仇恨是否如此强烈,以至于我应该招致可能的性能惩罚(尽管在这种情况下很小),以避免从循环中跳出两行?我的意思是,这怎么会比仅仅
中断
继续
更不清楚呢?它可以。有些人不喜欢
break
,尤其是
continue
几乎和
goto
一样。其他语言允许标记循环,以便您可以一次退出多个级别。我个人会很务实,如果效果最好的话就使用它。(事实上,我发现一行中的if/for/if比goto更令人不安,尤其是因为我必须滚动才能看到全部内容)我认识到
goto
几乎被普遍反对,但我不认为有比
从内环继续
外环更好的方法。我能想到的唯一方法是使用一个额外的变量(一个
bool
来存储外部循环是否应该
继续
)。我认为使用一个额外的
bool
会比一个
goto
更好,但作为一个程序员,我还缺乏经验。我只是不相信
goto
本身会是一个安全的语句,而且额外的变量不会花费那么多,是吗?但那是我的2c。^^'将代码位提取到一个函数中,并使用提前返回。因此,使用额外的变量,引发堆栈缠绕/展开/将函数标记为
inline
,并希望编译器这样做,或者只使用
goto
。对
goto
的教条式仇恨是否如此强烈,以至于我应该招致可能的性能惩罚(尽管在这种情况下很小),以避免从循环中跳出两行?我的意思是,这怎么会比仅仅
中断
继续
更不清楚呢?它可以。有些人不喜欢
break
,尤其是
continue
几乎和
goto
一样。其他语言允许标记循环,以便您可以一次退出多个级别。我个人会很务实,如果效果最好的话就使用它。(事实上,我发现其中一行的if/for/if比goto更令人不安,尤其是因为我必须滚动才能看到全部内容)