相关疑难解决方法(0)

是否有一个使用没有大括号的switch语句的有用案例?

在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),但使用至少两个具有某种有用目的的案例标签?

c language-lawyer

44
推荐指数
1
解决办法
1615
查看次数

标签 统计

c ×1

language-lawyer ×1