Share via


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, se produce un error implícito de un noempty switchcase en un siguiente case.

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 la obtención implícita de switch instrucciones