赞 | 0 |
VIP | 5 |
好人卡 | 0 |
积分 | 5 |
经验 | 12441 |
最后登录 | 2017-4-21 |
在线时间 | 177 小时 |
Lv2.观梦者
- 梦石
- 0
- 星屑
- 485
- 在线时间
- 177 小时
- 注册时间
- 2006-10-3
- 帖子
- 618
|
以下引用link006007于2008-10-19 20:36:57的发言:
一定要有序的才能偏移吗? 在编译阶段 switch的case内容被编译成一段地址的跳转表,
然后在执行时,更具当前的值直接跳转到对应的代码段中, 也就是说 不管你case的内容有几条
在switch语句中, 都只有执行一次跳转(这可能也是switch要自己break的原因). 而if elsif 则是根据当前逻辑逐个判断...
我不知道你是在什么环境下编译的, 不同的编译器, 在解释上是有一些差距的
case 0, 3, 5 直接就被编译成一张跳转表 和case值的有序,连续没太大关系
以上 我也不敢确定= =
不过Ruby的switch可能和C的不一样... C的只能是数值, 而RM可以case字符串= =
应该实现上不一样
[本贴由作者于 2008-10-19 20:39:42 最后编辑]
东灿 20:48:45
语法跟CPU指令不要混为一谈。。。。
东灿 20:49:00
语法是纯理想状态。
"这可能也是switch要自己break的原因"
貌似不然,反汇编C的SWITCH代码段:
or ax,ax //case 0:
je A
cmp ax,3 //case 3:
je B
jmp C //default:
A: mov di,1 //variable=1
jmp D //break
B: mov di,2 //variable=2
jmp D //break
C: mov di,3 //variable=3
D: xor ax,ax
ret
break更像是 jmp X |
|