atributo de C++: fallthrough (desde C++17)
De cppreference.com
Indica que la caída (fallthrough, ya que control del flujo del programa no fue controlado por una instrucción break) de la etiqueta case previa es intencional y no deberá ser diagnosticada por un compilador que advierte acerca de este comportamiento.
Sintaxis
[[fallthrough]]
|
|||||||||
Explicación
Solamente puede aplicarse a la instrucción nula para crear una instrucción fallthrough ([[fallthrough]];).
una instrucción fallthrough solamente puede ser usada en una instrucción switch, donde la próxima instrucción a ser ejecutada es una instrucción con una etiqueta case o default para esa instrucción switch.
Si la instrucción fallthrough se encuentra dentro de un bucle, la siguiente instrucción (etiquetada) tiene que formar parte de la misma iteración de ese bucle.
Ejemplo
Ejecuta este código
void f(int n) {
void g(), h(), i();
switch (n) {
case 1:
case 2:
g();
[[fallthrough]];
case 3: // no hay advertencia sobre fallthrough
h();
case 4: // el compilador podría advertir sobre fallthrough
if(n < 3) {
i();
[[fallthrough]]; // de acuerdo
}
else {
return;
}
case 5:
while (false) {
[[fallthrough]]; // mal formado: la próxima instrucción no es parte de la misma iteración
}
case 6:
[[fallthrough]]; // mal formado: no hay una etiqueta case o default subsecuente
}
}