Ich habe eine Situation, in der ich möchte, dass zwei Fälle in einer C ++ - switch-Anweisung beide zu einem dritten Fall durchfallen. Insbesondere würde der zweite Fall bis zum dritten Fall durchfallen , und der erste Fall würde auch bis zum dritten Fall durchfallen, ohne den zweiten Fall zu durchlaufen.
Ich hatte eine blöde Idee, habe es versucht und es hat funktioniert! Ich wickelte den zweiten Fall in einem if (0) {
... }
. Es sieht aus wie das:
#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;
}
Wenn ich es ausführe, erhalte ich die gewünschte Ausgabe:
0: ac
1: bc
2: c
Ich habe es sowohl in C als auch in C ++ versucht (beide mit Clang), und es hat das Gleiche getan.
Meine Fragen sind: Ist das C / C ++ gültig? Soll es tun, was es tut?