2010-04-02 108 views
28

想,我有一個if語句for循環中:`break`是否僅用於for,while,do-while,switch和if語句?

for(; ;) 
{ 
    if() 
    { 
    printf(" inside if"); 
    break; 
    }//if   

    printf("inside for"); 
}//for 

現在,將break聲明會導致編譯出來的for循環或將它只能出現在身體的出if一次if中的條件變得滿足了嗎?

+1

僅供參考,如果不是循環。 – 2015-09-27 07:47:17

+1

@CoolGuy也不是'switch' – 2015-09-27 08:14:16

+0

@ M.M我知道。 OP在[上一個版本](http://stackoverflow.com/revisions/2565659/2)中說過「_'if' loop_」,我正在糾正它。 – 2015-09-27 08:18:49

回答

63

break聲明跳出了最近的封閉循環開關聲明

break沒有打出去的if聲明的,但最近的loopswitch包含if聲明。不破壞if聲明的原因是因爲它通常用於決定是否要跳出loop

有趣的是,電話交換機因爲發明了C made exactly this bug的公司而變得不合時宜。他們想擺脫if聲明,他們忘記了它會突破整個for聲明。

+0

謝謝先生,這是一個非常豐富的例子。 我現在清楚了。 – avi 2010-04-02 08:19:19

+2

[引用需要] :) – erelender 2010-04-02 08:25:28

+1

這是20年前的新聞。 erelender,你可以盡我所能Google,也許從ess軟件bug中斷等事情開始。 – 2010-04-04 23:44:51

16

它將跳出for循環。 A break聲明僅對環路(dofor,while)和switch語句(用於突破case)有影響。

C99 standard,部分6.8.6.3:

約束

break語句應僅在或作爲開關體或循環體出現。

語義

break語句終止最小包圍開關 或循環語句的執行。

+0

謝謝馬克先生 – avi 2010-04-02 08:20:38

13

break不會突破if子句,但是最接近的循環或switch子句。此外,if子句不稱爲「循環」,因爲它從不重複其內容。

+0

謝謝馬蒂先生。 – avi 2010-04-02 08:20:08

2

中斷語句僅在循環和切換子句中生效。無論如何,它會從最近的封閉循環中出來。這是一個很好的習慣,使用一些if語句附帶的條件中斷即break。如果你想從所有的循環或循環中走出來,你可以使用goto語句。例如:

while(true) { 
    while (some_condition) { 
      if (some_condition) 
       goto label; 
    } 
} 
label: // do something here 
+1

幾乎每個問題goto都可以用break和continue聲明來代替。goto語句傾向於創建「sphegetti」代碼 – kapil 2015-10-02 13:16:09