2

what is the between in writing a loop by branching jump statement and a normal loop i.e for example

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

and

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

is the performance of both of them are equal?

4

3 回答 3

10

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

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

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

于 2013-06-14T12:44:33.587 回答
2

不同之处在于第一个更容易阅读,这就是goto 通常避免使用的原因。同样正如dasblinkenlight 的回答所指出的,语义是不一样的。

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

也许不是在这种特殊情况下,但一般来说,您想要做的事情的更高级的描述是首选,然后循环结构比goto.

于 2013-06-14T12:43:35.017 回答
2

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

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

于 2013-06-14T12:46:50.600 回答