我有一种情况,我希望C ++ switch语句中的两种情况都落入第三种情况。具体而言,第二种情况将落入第三种情况,并且第一种情况也将落入第三种情况而不会通过第二种情况。
我有一个愚蠢的想法,尝试了一下,就成功了!我把第二个盒子包裹在一个if (0) {
...中}
。看起来像这样:
#ifdef __cplusplus
# include <cstdio>
#else
# include <stdio.h>
#endif
int main(void) {
for (int i = 0; i < 3; i++) {
printf("%d: ", i);
switch (i) {
case 0:
putchar('a');
// @fallthrough@
if (0) { // fall past all of case 1 (!)
case 1:
putchar('b');
// @fallthrough@
}
case 2:
putchar('c');
break;
}
putchar('\n');
}
return 0;
}
运行它时,我得到所需的输出:
0: ac
1: bc
2: c
我在C和C ++(都使用clang)中都尝试过,并且做同样的事情。
我的问题是:这是有效的C / C ++吗?它应该做什么吗?