Mam sytuację, w której chciałbym, aby dwa przypadki w instrukcji przełącznika C ++ przechodziły do trzeciego przypadku. W szczególności druga sprawa przechodziłaby do trzeciej sprawy, a pierwsza sprawa również przechodziłaby do trzeciej sprawy bez przechodzenia przez drugą sprawę.
Miałem głupi pomysł, wypróbowałem go i zadziałało! I owinięty drugi przypadek w if (0) {
... }
. To wygląda tak:
#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;
}
Po uruchomieniu otrzymuję żądany wynik:
0: ac
1: bc
2: c
Wypróbowałem to zarówno w C, jak i C ++ (oba z clang) i zrobiło to samo.
Moje pytania to: czy to jest poprawne C / C ++? Czy ma robić to, co robi?