2010-11-28 68 views
0

我想了解一个C代码。在某些部分有:关于C中“goto”的问题

for ...{ 
    if condition{ 
     a=1; 
     break; 
    } 
} 

这在以后的版本中改为:

for ...{ 
    if condition{ 
     goto done; 
    } 
} 
done: a=1; 

从我的角度来看,无论是vesions应该给予同样的结果,但它不会发生。你知道为什么吗?

更正:修复的方法是:

for ...{ 
    if condition{ 
     goto done; 
    } 
} 

      goto notdone; 
      done: 
       ok=0; 
      notdone: 
+0

这是整个代码还是有更多的嵌套循环? – casablanca 2010-11-28 17:45:45

+0

不,没有更多的嵌套循环 – flow 2010-11-28 17:46:41

+2

我看到你的更正,我承认它和版本1一样,但我不明白你为什么要用另一个使用不直观的`goto`s ... – Heinzi 2010-11-28 17:54:02

回答

6

这取决于对环是否有任何其他的退出条件。

  • 在第一个示例中,a=1只发生在if语句中的特定退出条件。

  • 在第二个示例中,a=1发生在全部情况下退出循环。它只能使用return语句或另一个goto语句绕过。

3

在第二个版本,a=1最终执行即使condition是假的,仅仅是因为控制流程最终达到done:后循环条件不再满足。