В 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 pre-standard, 6.8.4, стр. 147), синтаксис был верным: оператор switch просто имеет оператор после выражения switch и закрывающей круглой скобки.
Но в моей практике программирования я никогда не встречал такого любопытного оператора switch (и я не хотел бы видеть в коде, за который я должен взять на себя ответственность), но я начал задаваться вопросом:
Кто-нибудь из вас знает такое выражение switch, одно без использования фигурных скобок, но все еще имеющее смысл? Не только switch (i);
(что является законным, но и NOP), но используя по крайней мере две метки меток, имеющие какую-то полезную цель?