在决定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

当然,如果要测试同一个整数的多个值,则aswitch更具可读性——这就是它的目的。

关于c - 简单状态机。 switch()什么时候打败-如果-如果--,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15574989/

10-16 11:11