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