C ++のswitchステートメントの2つのケースで、両方とも3番目のケースに分類したいという状況があります。具体的には、2番目のケースは3番目のケースにフォールスルーし、最初のケースも2番目のケースを通過せずに3番目のケースにフォールスルーします。
私はばかげた考えを持っていて、それを試しました、そしてそれはうまくいきました!2番目のケースを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 ++ですか?それはそれがすることをすることになっていますか?