Tengo una situación en la que me gustaría que dos casos en una instrucción de cambio de C ++ cayeran en un tercer caso. Específicamente, el segundo caso pasaría al tercer caso, y el primer caso también pasaría al tercer caso sin pasar por el segundo caso.
Tuve una idea tonta, la probé y ¡funcionó! Envolví el segundo caso en un if (0) {
... }
. Se parece a esto:
#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;
}
Cuando lo ejecuto, obtengo el resultado deseado:
0: ac
1: bc
2: c
Lo probé tanto en C como en C ++ (ambos con clang) e hizo lo mismo.
Mis preguntas son: ¿Es esto válido C / C ++? ¿Se supone que debe hacer lo que hace?