在决定if - else if - else和switch - case之间可以遵循哪些指导原则?
等效结构对的一些例子。或者是他们?
int a;
#define const1 42
#define const2 666
if(a == const1){};
switch(a){
case const1: {}
break;
}
if(a == const1){}
else {}
switch(a){
case const1: {}
break;
default: {}
break;
}
if(a == const1){}
else if(a == const2){}
else {}
switch(a){
case const1: {}
break;
case const2: {}
break;
default: {}
break;
}
从这里开始,我认为switch在可读性和性能方面都绝对优越。
事实上,我目前处于最后的状况,试图决定走哪条路。
答案 0 :(得分:3)
如果他们只是涉及评估一个变量,测试它并根据它执行一个语句,那么逻辑就没有区别了,任何体面的编译器都可以看到它。
我使用32
和if
以及gcc尝试了相同的测试(检查switch
),即使已关闭所有优化,也是如此:
对于if
:
movl a(%rip), %eax
cmpl $32, %eax
jne .L2
movl $1, %eax
jmp .L3
代表switch
:
movl a(%rip), %eax
cmpl $32, %eax
jne .L6
movl $1, %eax
jmp .L3
当然,如果您要为许多值测试相同的整数,switch
更具可读性 - 这就是它的目的。