C語言之switch語句與if...else..語句的比較及switch語句高效的原因


1.switch語句與if...else...語句的區別:

  • switch語句只進行等值判斷,而if...else可以進行區間判斷
  • switch結構的執行效率遠遠高於if...else。在分支條件比較多的情況下這種趨勢愈發明顯

2.switch語句高效的原因

  游戲中的快捷鍵常用switch語句實現功能

對比if...else和switch語句:

(1)一個簡單的if...else...語句:

#include<stdio.h>

void main() {
    int x = 3;
    if (x == 1) {
        printf("x=1");
    }
    else if (x == 2) {
        printf("x=2");
    }
    else if (x == 3) {
        printf("x=3");
    }
    else {
        printf("xxx");
    }
}

 對應的匯編指令:

  

 

 大致意思是每次判斷,判斷如果不符合就下次判斷,否則執行對應的代碼

 

(4)switch語句

#include<stdio.h>

void main() {
    int x = 3;
    switch (x) {
    case 1:
        printf("x=1");
        break;
    case 2:
        printf("x=2");
        break;
    case 3:
        printf("x=3");
        break;
    default:
        printf("xxx");
    }
}

 對應的匯編指令:

  

 

switch語句會在case開始前進行x的判斷,相等了就跳到對應的位置,否則就jmp到default的位置。

這里看好像與if else 相比並沒有什么優勢。

如果把switch語句的判斷數加兩個:

#include<stdio.h>

void main() {
    int x = 3;
    switch (x) {
    case 1:
        printf("x=1");
        break;
    case 2:
        printf("x=2");
        break;
    case 3:
        printf("x=3");
        break;
    case 4:
        printf("x=4");
        break;
    case 5:
        printf("x=5");
        break;
    default:
        printf("xxx");
    }
}

 

此時的匯編語句:

  

條件多的時候就會通過生成一張表,這個表里面存儲所有分支的函數地址,一次就可以跳到對應的地址,避免了不停的判斷。

 


免責聲明!

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



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