switch語句中的default位置的解析


先來看幾個實例

1、

    實例源代碼為:

#include<stdio.h>
                                                    
int main()
{
    int i = 2;
    switch (i)
    {
        default:
            printf("%s\n", "default");
        case 1:
            printf("%s\n", "case 1");
        case 2:
            printf("%s\n", "case 2");
        case 3:
            printf("%s\n", "case 3");
    }
    return 0;
}

當i為2時輸出為:  

  case 2

  case 3

 

當將i該為0時輸出為:  

    default

    case 1

    case 2

    case 3

 

2、現在將default語句放在case語句的中間

    實例代碼為:

#include<stdio.h>
                                                 
int main()
{
    int i = 2;
    switch (i)
    {
        case 1:
            printf("%s\n", "case 1");
        default:
            printf("%s\n", "default");
        case 2:
            printf("%s\n", "case 2");
        case 3:
            printf("%s\n", "case 3");
    }
    return 0;
}

當i為2時輸出為:

    case 2

    case 3

 

當將i改為0時輸出為:

 

    default

    case 2

    case 3

 

解析:其實switch語句一般是如下這樣處理的(在編譯器沒有優化的情況下

    【對於上面實例2的代碼,這里用類似匯編代碼的偽代碼來說明其執行過程】

if(i == 1)

    jmp to case 1;

else if (i == 2)

    jmp to case 2;

else if (i == 3)

    jmp to case 3;

else

    jmp to default;

case 1:     printf("%s\n", "case 1");

default:    printf("%s\n", "default");

case 2:     printf("%s\n", "case 2");

case 3:     printf("%s\n", "case 3");

 

  上面用的說明方式有點不倫不類,但很說明問題。它給出了一種匯編代碼解釋switch語句的方式。

首先判斷i與各個case后的條件值是否相等,然后進行相應的跳轉。不管你編寫的代碼中default

放在那里,這里的條件判斷都是先按順序比較其他非default值,當這些條件都不滿足的時候,

才跳轉到default的相應代碼處執行。將每一種情況的處理代碼加上標號按你的語句給出的順序排

列在開始判斷語句的后面。這就是switch的匯編解析,即它真正被編譯為可執行程序的樣子。

這里給出的是一般的情況,編譯器可能有各種優化的措施,其匯編代碼可能和上面的形式不同

但效果是一樣的,只要按照上面的原理去推就可以了。

  還可以參考這里

  你懂了嗎?趕快弄兩個實例驗證一下吧。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM