【发布时间】:2010-12-13 10:17:10
【问题描述】:
我有两段代码:
一个do while循环:
do
{
errorflag=0;
...
if(cond1)
{
errorFlag=12;
break; // Error Conditions
}
.
. // Processing
.
if(cond2)
{
errorflag=56;
break;
}
.
.
} while (0);
转到标签:
errorflag=0;
if(cond1)
{
errorflag=12;
goto xy;
.
.
.
.
if(Cond2)
{
errorflag=56;
goto xy;
}
.
.
.
xy:
哪个更好?请给我详细的为什么?还是有更好的方法来做到这一点?我们正在优化代码。我们最关注的是这类大循环。是组装级别的,优化的空间不大。请提供您的意见。
我不喜欢使用 else-if,因为这又是检查另一个条件的开销。所以有问题直接退出。
我觉得在这个编辑之后我的问题是有道理的
提前致谢
【问题讨论】:
-
简单的
else if有什么问题?有多少条件?这实际上是什么语言? -
这不是一个很好的问题。这就像“哪个更好:用钝勺舀出我的大脑或用坚果饼干压碎我的睾丸”。两者都不好,避免它们!此外,
do...while通常(但不总是)表明您编写了错误的代码。避免它,除非它真的真的很有意义。我知道很多人会不同意这种说法,但我一直发现while...do结构更容易阅读,而且通常只是...更好。 -
@AlastairG:睾丸被压碎是可以生存的。这显然是更好的选择。话虽如此,我认为我不会滥用 C 控制结构并避免任何一种惩罚。我同意你对
do ... while()的看法,我只是不使用它。 -
@AlastairG:关于我的问题。我有一个块。其中有一系列退出条件,这取决于它所做的处理,就在条件之上。所以使用 while....do 是没有用的,因为它首先检查条件,所以会产生开销。在我们的例子中,它是经常使用的函数。这就是我们使用 do...while 的原因。在我们的案例中是有意义的
-
一个类似的问题有答案:stackoverflow.com/questions/1412081/…
标签: c coding-style goto do-while