Delen via


Waarschuwing C26819

Niet-geannoteerde doorval tussen switch-labels (es.78).

Opmerkingen

Deze controle behandelt impliciete fallthrough in switch-instructies. Impliciete fallthrough is wanneer de controlestroom wordt overgedragen van één switchcase rechtstreeks naar een volgende switchcase zonder het gebruik van de [[fallthrough]]; instructie. Deze waarschuwing wordt gegenereerd wanneer een impliciete fallthrough wordt gedetecteerd in een switchcase met ten minste één instructie.

Zie ES.78 voor meer informatie: Vertrouw niet op impliciete fallthrough in switch instructies in de C++-kernrichtlijnen.

Voorbeeld

In dit voorbeeld vindt impliciete fallthrough plaats van een niet-lege switchcase naar een volgende 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;
    }
}

U kunt dit probleem oplossen door een [[fallthrough]]; instructie in te voegen waarin de fallthrough plaatsvindt.

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

Een andere manier om het probleem op te lossen, is door de impliciete fallthrough te verwijderen.

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

Zie ook

ES.78: Vertrouw niet op impliciete overgang in switch verklaringen