intc,i;for(inti=1;i
這種switch語句塊中default放前面的情況怎么走
繁星coding
2019-05-25 17:12:51
TA貢獻(xiàn)1840條經(jīng)驗(yàn) 獲得超5個(gè)贊
首先明確一下switch中的一些注意點(diǎn):1.switch語句體由一系列case標(biāo)簽和一個(gè)可選default標(biāo)簽組成。case語句中的兩個(gè)常量表達(dá)式的計(jì)算結(jié)果不能為同一個(gè)值。default標(biāo)簽只能出現(xiàn)一次。標(biāo)記語句不是語法要求,但如果它們不存在,switch語句是無意義的。默認(rèn)語句(即default標(biāo)簽)無需顯示在末尾;它可以顯示在switch語句體的任何位置。case或default標(biāo)簽只能顯示在switch語句內(nèi)。摘自:MicrosoftVisualStudio2015c++Switch語句官方文檔2.上述所說的case和default本身就是標(biāo)簽,就是告訴編譯器從滿足這個(gè)標(biāo)簽開始向后執(zhí)行,之后不會(huì)再判斷其他標(biāo)簽的正確性,直到break語句或者switch語句的作用域結(jié)束。ForthisproblemSTEP1:當(dāng)i=1時(shí),由于i!=2&&i!=4故從default標(biāo)簽后開始執(zhí)行,此時(shí)執(zhí)行語句c+=i;(我們現(xiàn)在就假設(shè)編譯器幫你把c初始化為0,要知道并不是所有的編譯器都這么友好)執(zhí)行后c的值為1;STEP2:綜合上述1,2可知由于此時(shí)沒有碰到任何break語句也沒有到switch語句的作用域結(jié)束(因?yàn)檫@個(gè)default語句是放在第一個(gè)的)所以它接著向后執(zhí)行case2后的語句(此時(shí)編譯器已經(jīng)不看滿不滿足case標(biāo)簽了)此時(shí)執(zhí)行語句c++;執(zhí)行后c的值為2;遇到break語句跳出switch語句。STEP3:當(dāng)i=2時(shí),由于i滿足case2的情況,所以直接從case2便簽后的語句開始執(zhí)行,此時(shí)執(zhí)行語句c++,執(zhí)行后c的值為3,遇到break語句跳出switch語句。STEP4:當(dāng)i=3時(shí),跳出for循環(huán)輸出c=3;(上述過程為本人用VisualStudio2015單步調(diào)試并結(jié)合資料得出的結(jié)論)
TA貢獻(xiàn)1744條經(jīng)驗(yàn) 獲得超4個(gè)贊
當(dāng)i=1時(shí)候進(jìn)入default:c=1沒有break所以繼續(xù)向下匹配case2得c=2break當(dāng)i=2時(shí)候優(yōu)先匹配case2進(jìn)入case2:c=3break當(dāng)i=3時(shí)候循環(huán)不成立。輸出c為3
舉報(bào)