У мене ситуація, коли я б хотів, щоб у двох випадках у операторі перемикання C ++ обидва переходили до третього випадку. Зокрема, друга справа потрапила б до третьої справи, а перша справа також потрапила б до третьої справи, не проходячи через другу справу.
У мене була німа ідея, спробував, і це спрацювало! Я загорнув другий випадок в 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 ++? Чи повинен він робити те, що робить?