Espacios de nombres
Variantes
Acciones

atributo de C++: fallthrough (desde C++17)

De cppreference.com
< cpp‎ | language‎ | attributes
 
 
 
 
Atributos
(C++23)
(C++14)
fallthrough
(C++17)
(C++20)
(C++17)
(C++11)
(C++20)
 

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

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
  }
}