1. 程式人生 > 實用技巧 >C語言之switch語句與if...else..語句的比較及switch語句高效的原因

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"); } }

此時的彙編語句:

  

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