简单的状态机。什么时候switch()击败if - else if - else

时间:2013-03-22 16:12:15

标签: c conditional-statements

在决定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在可读性和性能方面都绝对优越。

事实上,我目前处于最后的状况,试图决定走哪条路。

1 个答案:

答案 0 :(得分:3)

如果他们只是涉及评估一个变量,测试它并根据它执行一个语句,那么逻辑就没有区别了,任何体面的编译器都可以看到它。

我使用32if以及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更具可读性 - 这就是它的目的。