2010-11-28 63 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:後循環條件不再滿足。