通过分支语句编写循环和普通循环之间的区别是什么?

what is the between in writing a loop by branching statement and a normal loop

本文关键字:循环 之间 区别 是什么 语句 分支      更新时间:2023-10-16

通过分支跳转语句编写循环与普通循环之间的区别是什么例如

        main()
        {
        int i=0;
        while(i<9)
        {
          //do something
           i++;
        }

        main()
        {
            int i=0;
            label:
             //do something
              i++;
             if(i<9)
              goto label;
         }

两者的性能是否相等?

这两个循环是不等价的:第二个循环类似于do/while循环,而不是while循环:

main() {
    int i=0;
    do {
      //do something
       i++;
    } while(i<9);
}

就性能而言,两者应该相同;但是,goto解决方案的可读性受到很大影响,因此我将避免在您的任何项目中使用它。

区别在于第一个更容易阅读,这就是为什么通常避免使用goto。正如dasblinkenlight的回答所指出的那样,语义是不一样的。

性能应该是相同的,因为CPU为了实现两者必须进行跳转。当然,有了更高层次的意图描述(如第一种情况),编译器能够优化某些东西的机会就会增加。

可能不是在这个特殊的情况下,但一般来说,更高级地描述您想要做的事情是首选,然后循环结构比goto更好。

在这种情况下,编译器应该产生等效的输出。但是我不认为这两个例子是等价的——while首先检查条件,然后决定是否执行语句体。goto的例子首先执行语句体,然后检查条件——它的行为更像do while语句。

在这种情况下不应该使用goto,因为它会降低可读性。goto s仅在有限的场景中有效