通过分支跳转语句和普通循环编写循环之间的区别 例如
main()
{
int i=0;
while(i<9)
{
//do something
i++;
}
和
main()
{
int i=0;
label:
//do something
i++;
if(i<9)
goto label;
}
两者的表现是否相等?
答案 0 :(得分:10)
这两个循环不等效:第二个循环类似于do
/ while
循环,而不是while
循环:
main() {
int i=0;
do {
//do something
i++;
} while(i<9);
}
就性能而言,两者应该是相同的;但是,使用goto
suffers considerably的解决方案的可读性,所以我不会在任何项目中使用它。
答案 1 :(得分:2)
不同之处在于第一个更容易阅读,这就是为什么goto
通常被避免的原因。同样如dasblinkenlight's answer中指出的那样,语义也不尽相同。
性能应该大致相同,因为CPU必须执行跳转才能实现这两者。当然,通过更高级别的意图描述(如第一种情况),编译器能够优化某些内容的可能性会增加。
也许不是在这种特殊情况下,但一般来说,首选更高级别的描述,然后循环结构优于goto
。
答案 2 :(得分:2)
在这种情况下,编译器应生成等效输出。但我不认为这两个例子是等价的 - while
首先检查条件,然后决定执行机构。您使用goto
的示例首先执行正文,然后检查条件 - 它的行为更像do while
语句。
在这种情况下,您不应该使用goto
,因为它会降低可读性。 goto
仅在有限数量的情况下有效。