在H&S5中,我遇到了"最离奇"的切换语句(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);
Run Code Online (Sandbox Code Playgroud)
这个想法似乎是为了避免prime(x)最常见的小数字的开销.
当我看到这个陈述时,我对丢失的大括号感到困惑,但是检查官方语法(C1X预标准,6.8.4,第147页),语法是正确的:switch语句只是在切换表达式之后有一个语句和右括号.
但是在我的编程实践中,我再也没有遇到过这样一个好奇的切换语句(我不想看到任何代码,我必须承担责任),但我开始想知道:
你们中的任何人都知道这样的开关表达式,一个没有使用大括号,但仍然有意义吗?不只是switch (i);(这是合法的,而是NOP),但使用至少两个具有某种有用目的的案例标签?