源码如下:
#include <stdio.h>
void main(){
int flag;
flag=1;
switch (flag){
case 1:
printf("1\n");
break;
case 2:
printf("2\n");
break;
case 3:
printf("3\n");
break;
case 4:
printf("4\n");
break;
case 5:
printf("5\n");
break;
default:
printf("%d\n",flag);
}
}
在int flag;处下断点,调试执行。如下图。


分析汇编代码,有两行跳转代码,分析逻辑如下:


上图很清晰了,当flag《=4时,最终跳转到的地址是连续的,间隔为4,就是int型的大小,猜测switch的选项值放在连续地址块。如下图。


当flag》=4时,跳转到default分支。如下图。


由此可知此switch不需要比较选项值(flag)具体是啥,它将flag和下标关联,从而直接访问相应地址的值作为反馈,速度很快,愉快地结束。