Bir C ++ switch deyimindeki iki durumun her ikisinin de üçüncü bir duruma düşmesini istediğim bir durum var. Özellikle, ikinci vaka üçüncü duruma düşeceği ve ilk vaka da üçüncü duruma düşeceği olmadan ikinci durumda geçerek.
Aptal bir fikrim vardı, denedim ve işe yaradı! Bir ikinci durumda sarılmış if (0) {
... }
. Şöyle görünüyor:
#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;
}
Çalıştırdığımda istenen çıktıyı alıyorum:
0: ac
1: bc
2: c
Hem C hem de C ++ 'da denedim (her ikisi de clang ile) ve aynı şeyi yaptı.
Sorularım: Bu C / C ++ geçerli mi? Yaptığı şeyi yapması mı gerekiyor?