想,我有一個if
語句for
循環中:`break`是否僅用於for,while,do-while,switch和if語句?
for(; ;)
{
if()
{
printf(" inside if");
break;
}//if
printf("inside for");
}//for
現在,將break
聲明會導致編譯出來的for
循環或將它只能出現在身體的出if
一次if
中的條件變得滿足了嗎?
想,我有一個if
語句for
循環中:`break`是否僅用於for,while,do-while,switch和if語句?
for(; ;)
{
if()
{
printf(" inside if");
break;
}//if
printf("inside for");
}//for
現在,將break
聲明會導致編譯出來的for
循環或將它只能出現在身體的出if
一次if
中的條件變得滿足了嗎?
的break
聲明跳出了最近的封閉循環或開關聲明。
break
沒有打出去的if
聲明的,但最近的loop
或switch
包含if
聲明。不破壞if
聲明的原因是因爲它通常用於決定是否要跳出loop
。
有趣的是,電話交換機因爲發明了C made exactly this bug的公司而變得不合時宜。他們想擺脫if
聲明,他們忘記了它會突破整個for
聲明。
它將跳出for
循環。 A break
聲明僅對環路(do
,for
,while
)和switch
語句(用於突破case
)有影響。
從C99 standard,部分6.8.6.3:
約束
break語句應僅在或作爲開關體或循環體出現。
語義
break語句終止最小包圍開關 或循環語句的執行。
謝謝馬克先生 – avi 2010-04-02 08:20:38
中斷語句僅在循環和切換子句中生效。無論如何,它會從最近的封閉循環中出來。這是一個很好的習慣,使用一些if語句附帶的條件中斷即break。如果你想從所有的循環或循環中走出來,你可以使用goto語句。例如:
while(true) {
while (some_condition) {
if (some_condition)
goto label;
}
}
label: // do something here
幾乎每個問題goto都可以用break和continue聲明來代替。goto語句傾向於創建「sphegetti」代碼 – kapil 2015-10-02 13:16:09
僅供參考,如果不是循環。 – 2015-09-27 07:47:17
@CoolGuy也不是'switch' – 2015-09-27 08:14:16
@ M.M我知道。 OP在[上一個版本](http://stackoverflow.com/revisions/2565659/2)中說過「_'if' loop_」,我正在糾正它。 – 2015-09-27 08:18:49