3.6.8 switch语句
目录
P161
解释一下图3-23和.rodata文件:这两个文件都是由编译器产生的,在遇到switch语句的时候,编译器先产生.rodata文件,于是就可以知道可以用.L4去标识这个文件;然后.L4(,%rsi,8)的意思就是地址.L4+0+8*%rsi;.quad是一个声明,表示这里是8字节的值;.L7重复两次就是Case 104和Case 106的情况;另外索引不会是负的,如果有Case的值是负的,那么进行偏置
另外还补充一个情景

可以看到这里在汇编语言中,Case 3还要令w为1,而且Case 2直接跳转到了merge,这是为了防止直接进入Case 3的情况
补充一些学生的提问
- 如果最小的
Case和最大的Case的差很大,但是总的Case的个数很小,难道要建立一个很大的表吗?- 这时候编译器会将switch变成if-else语句

浙公网安备 33010602011771号