在决定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在可读性和性能上都绝对是优越的。
事实上,我现在处于最后一种情况,正试图决定走哪条路。
最佳答案
如果它们只涉及计算一个变量,测试它并根据它执行一个语句,那么逻辑上就没有区别,任何一个优秀的编译器都可以看到这一点。
我用一个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
当然,如果要测试同一个整数的多个值,则a
switch
更具可读性——这就是它的目的。关于c - 简单状态机。 switch()什么时候打败-如果-如果--,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15574989/