Is есть ли полезный случай использования оператора switch без фигурных скобок?

В H & S5 я столкнулся с "самым причудливым" оператором switch (8.7.1, стр. 277), не использующим подтяжки.
Вот пример:

switch (x)
    default:
    if (prime(x))
        case 2: case 3: case 5: case 7:
            process_prime(x);
    else
        case 4: case 6: case 8: case 9: case 10:
            process_composite(x);

Похоже, идея состоит в том, чтобы избежать накладных расходов на prime (x) для наиболее распространенных малых чисел.

Когда я увидел это утверждение, я был сбит с толку отсутствием фигурных скобок, но, проверив официальную грамматику ( предварительный стандарт C1X , 6.8.4, стр. 147), синтаксис был правильным: переключатель Оператор просто имеет оператор после выражения переключателя и закрывающей круглой скобки.

Но в своей практике программирования я никогда больше не встречал такого любопытного оператора switch (и я бы не хотел видеть в коде какой-либо код, за который я должен взять на себя ответственность), но я начал задаваться вопросом:

Может ли кто-нибудь из вас знаете такое выражение switch, без фигурных скобок, но все же имеющее смысл? Не просто switch (i); (что допустимо, но NOP), а с использованием как минимум двух меток case, имеющих какую-то полезную цель?

44
задан Johan Bezem 14 November 2011 в 06:46
поделиться