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"); } }
此时的汇编语句:
条件多的时候就会通过生成一张表,这个表里面存储所有分支的函数地址,一次就可以跳到对应的地址,避免了不停的判断。