Tôi có một tình huống mà tôi muốn hai trường hợp trong một câu lệnh chuyển đổi C ++ để cả hai chuyển sang trường hợp thứ ba. Cụ thể, trường hợp thứ hai sẽ rơi vào trường hợp thứ ba, và trường hợp đầu tiên cũng sẽ rơi vào trường hợp thứ ba mà không chuyển qua trường hợp thứ hai.
Tôi đã có một ý tưởng ngu ngốc, đã thử nó, và nó đã thành công! Tôi quấn trường hợp thứ hai trong một if (0) {
... }
. Nó trông như thế này:
#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;
}
Khi tôi chạy nó, tôi nhận được đầu ra mong muốn:
0: ac
1: bc
2: c
Tôi đã thử nó trong cả C và C ++ (cả hai đều có tiếng kêu), và nó đã làm điều tương tự.
Câu hỏi của tôi là: C / C ++ này có hợp lệ không? Nó phải làm những gì nó làm?