преобразование оператора if в оператор switch - PullRequest
3 голосов
/ 08 июля 2011

Как я могу преобразовать следующий оператор if = в оператор switch БЕЗ необходимости создавать регистр для каждого числа между этим интервалом (41-49)? Возможно ли это?

if (num < 50 && num > 40)
{
    printf("correct!");
}

Ответы [ 4 ]

1 голос
/ 08 июля 2011

Как насчет этого?

switch ((num-41)/9) {
case 0:
    printf("correct!");
    break;
}
1 голос
/ 08 июля 2011

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

switch(num) {
    case 41:
    case 42:
    case 43:
    case 44:
    case 45:
    case 46:
    case 47:
    case 48:
    case 49:
        printf("correct!");
        break;
    default:
        break;
}
0 голосов
/ 08 июля 2011

В C или C ++ (так как вы используете printf, я предполагаю, что это так), случаи должны быть перечислены для каждого выбора.

Единственная разница между switch/case и ifвероятность того, что компилятор может превратить его в вычисленное goto вместо проверки диапазонов.Если switch/case поддерживает диапазоны, это лишит цель открытия возможности этой оптимизации.

0 голосов
/ 08 июля 2011
bool criteria1 = (num < 50 && num > 40);
switch criteria1: ...

Это может привести к многоуровневым сетям принятия решений .. страшно?

...