Advertencia C26819
Caída sin anotar entre etiquetas de cambio (es.78).
Comentarios
Esta comprobación abarca la caída implícita en las instrucciones de cambio. La caída implícita se produce cuando el flujo de control transfiere de un caso de cambio directamente al siguiente caso de cambio sin el uso de la instrucción [[fallthrough]];
. Esta advertencia se genera cuando se detecta una caída implícita en un caso de cambio que contiene al menos una instrucción.
Para más información, consulte ES.78: No confiar en la caída implícita de las instrucciones switch
en C++ Core Guidelines.
Ejemplo
En este ejemplo, la caída implícita se produce desde un switch
case
no vacío a un case
subsiguiente.
void fn1();
void fn2();
void foo(int a)
{
switch (a)
{
case 0: // implicit fallthrough from case 0 to case 1 is OK because case 0 is empty
case 1:
fn1(); // implicit fallthrough from case 1 into case 2
case 2: // Warning C26819.
fn2();
break;
default:
break;
}
}
Para corregir este problema, inserte una instrucción [[fallthrough]];
en la que se produzca la caída.
void fn1();
void fn2();
void foo(int a)
{
switch (a)
{
case 0:
case 1:
fn1();
[[fallthrough]]; // fallthrough is explicit
case 2:
fn2();
break;
default:
break;
}
}
Otra manera de corregir el problema es quitar la caída implícita.
void fn1();
void fn2();
void foo(int a)
{
switch (a)
{
case 0:
case 1:
fn1();
break; // case 1 no longer falls through into case 2
case 2:
fn2();
break;
default:
break;
}
}
Consulte también
ES.78: No confiar en un fallthrough implícito en instrucciones switch