0

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

事实上,我目前处于最后的境地,正在努力决定走哪条路。

4

1 回答 1

3

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

32我用 anif和 a和 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

当然,如果您要为许多值测试相同的整数,aswitch更具可读性——这就是它的用途。

于 2013-03-22T16:27:51.047 回答