switch語句中又愛又恨的default

在編寫代碼的過程中,經(jīng)常會(huì)遇到令人頭疼的問題,看似簡(jiǎn)單,其實(shí)陷阱很大。這里一下switch語句中的default分支問題。

常識(shí)

按照一般的編程規(guī)范,都是要求加上default分支的,它可以防止我們因?yàn)閷?duì)分支情況的考慮不周全,而出現(xiàn)難以預(yù)測(cè)的情況。同時(shí),每個(gè)分支也要求加上break。
而在有些問題當(dāng)中,往往就不加break,此時(shí),就會(huì)遇到default分支放哪兒的問題。
這個(gè)是比較基礎(chǔ)的問題,一般就是三種:

  1. default放在分支最前面
  2. default放在case的中間
  3. default放在分支最后面

我們還知道,如果不加上break語句,則會(huì)順序執(zhí)行匹配到的分支及以下的分支。

問題

看起來好像就這么多規(guī)律,可實(shí)際實(shí)驗(yàn)中,我還發(fā)現(xiàn)了一些問題。總結(jié)起來,即:

default語句只會(huì)在任何分支都匹配不到情況下執(zhí)行。
一旦有匹配到的分支,則default語句不論放在哪兒,都不會(huì)執(zhí)行。

下面給出一例代碼進(jìn)行說明

int main(){
    int x = 2;
    switch(x){
        default: 
            printf("default\n");
        case 2:
            printf("2\n");
    }
    return 0;
}

由上面可以看出

  1. 當(dāng)x=1時(shí),沒有case語句匹配,則default分支執(zhí)行。
    由于沒有break,則下面的case也跟著執(zhí)行。執(zhí)行結(jié)果為:
    default
    2

  2. 當(dāng)x=2時(shí),有case語句匹配,則default分支不再執(zhí)行。執(zhí)行結(jié)果為:
    2

好多人在說switch語句的時(shí)候,只會(huì)說沒有break語句,就會(huì)順序往下執(zhí)行。
最容易忽略的是,default分支不論放在哪兒,都只會(huì)在沒有case分支匹配的情況下,才會(huì)執(zhí)行。
實(shí)際工作中,要求是default分支要有,而且要有一些實(shí)際的處理操作,防止一些預(yù)料不到的情況。而且要求寫在最下面,這樣最安全,且看起來代碼最清晰。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 本章將會(huì)介紹 控制流For-In 循環(huán)While 循環(huán)If 條件語句Switch 語句控制轉(zhuǎn)移語句 continu...
    寒橋閱讀 809評(píng)論 0 0
  • Swift提供了多種控制流聲明。包括while循環(huán)來多次執(zhí)行一個(gè)任務(wù);if,guard和switch聲明來根據(jù)確定...
    BoomLee閱讀 2,072評(píng)論 0 3
  • Swift 提供了類似 C 語言的流程控制結(jié)構(gòu),包括可以多次執(zhí)行任務(wù)的for和while循環(huán),基于特定條件選擇執(zhí)行...
    窮人家的孩紙閱讀 778評(píng)論 1 1
  • 十三年前,一位美女教育家從香港去紐約。上飛機(jī)坐定之后,大家開始漫長(zhǎng)的路途閑聊。 惹人注目的美女成為搭訕的首選...
    小溪緩緩流閱讀 411評(píng)論 0 0
  • 想做的事情并沒有完成,主播公眾號(hào)發(fā)布,招聘發(fā)布,跟蹤主播進(jìn)程,還跑去看小說了,每晚弄到1點(diǎn)時(shí)間,白天去到公司困死了...
    崔煥英閱讀 296評(píng)論 0 0

友情鏈接更多精彩內(nèi)容