2013-03-22 7 views
0

Какие руководящие принципы могут быть соблюдены при выборе варианта if - else if - else и switch - case?Простые государственные машины. Когда переключатель() бить if - else if - else

Некоторые примеры эквивалентных пар структур. Или они?

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; 
} 

С этого момента, я думаю, что переключатель определенно выше с точки зрения удобочитаемости и производительности.

На самом деле, я нахожусь в последней ситуации, пытаясь решить, в какую сторону идти.

+2

Это перерыв, а не тормоз – MOHAMED

+1

Обычно, когда у вас есть 'enums' и вы хотите проверить их, вы используете' switch case'. В другом случае, о котором вы уже описали, слишком много условий 'else if' делают код менее читаемым. – noMAD

+0

коммутатор всегда лучше, поскольку во время компиляции создается сводная таблица, и ее вопрос заключается в их возврате. но имея дело с c-струнами? –

ответ

3

Если они просто включают в себя оценку переменной, ее тестирование и выполнение инструкции в зависимости от этого, в логике нет разницы, и любой достойный компилятор может это увидеть.

Я попробовал один и тот же тест (проверка на 32) с if и 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 

конечно, если вы собираетесь тестировать же Int eger для множества значений, switch более читабельна - вот для чего он предназначен.

+0

Существуют приложения, которые (к сожалению) ограничены -O0! – Vorac

+0

Это было создано с помощью '-O0' – teppic

+1

Возможно, именно поэтому он сказал:« При выключенной оптимизации [sic] –