标签:
杂谈 |
分类: 计算机与 Internet |
switch 语句
switch(a){
case 1:
a += 2;
default:
a += 16;
case 2:
a += 4;
break;
case 3:
a += 8;
}
等价的if-goto语句
if(a == 1)
goto a1;
if(a == 2)
goto a2;
if(a == 3)
goto a3;
goto df;
a1:
a += 2;
df:
a += 16;
a2:
a += 4;
goto end;
a3:
a += 8;
end:
等价的if-goto语句
0:
JNE 5
a 1 // if(a!=1) goto 5
如果不等于1跳转到下一个判断
1:
+
a
a 2 // a +=
2
2:
JMP 3 // goto 3 跳转到下
default 的内部
3:
+
a
a 16 // a += 16
4:
JMP 6 // goto 6
跳转到下一个case 的内部
5:
JNE 9
a 2 // if(a!=2) goto 9
如果不等于2跳转到下一个判断
6:
+
a
a 4 // a += 16
7:
JMP 13 // goto 13 跳转到结束
对应break
8:
JMP 10 // goto 10
跳转到下一个case 的内部
9:
JNE 12
a 3 // if(a!=2) goto 12
如果不等于3跳转到下一个判断
10:
+
a
a 8 // a += 16
11:
JMP 13 // goto 13
跳转到结束
12:
JMP 3 // goto
3 如果没有匹配的 跳转到 default
13:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13: