atributo de C++: fallthrough (desde C++17)
De cppreference.com
< cpp | language | attributes
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.
[editar] Sintaxis
[[fallthrough]]
|
|||||||||
[editar] 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.
[editar] 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 } }