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"); } }
此時的匯編語句:
條件多的時候就會通過生成一張表,這個表里面存儲所有分支的函數地址,一次就可以跳到對應的地址,避免了不停的判斷。