В 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, имеющих какую-то полезную цель?