Dela via


Varning C26819

Ej kommenterad genomströmning mellan växeletiketter (es.78).

Anmärkningar

Den här kontrollen omfattar implicita fallthrough i switch-instruktioner. Implicit genomströmning är när kontrollflödet överförs från ett växelfall direkt till följande växelfall utan att instruktionen [[fallthrough]]; används. Den här varningen utlöses när ett implicit genomfall identifieras i en switch-sats som innehåller minst en instruktion.

Mer information finns i ES.78: Förlita dig inte på implicit genomströmning i switch instruktioner i C++ Core Guidelines.

Exempel

I det här exemplet sker implicit genomströmning från en icke-tom switchcase till följande 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;
    }
}

Åtgärda det här problemet genom att infoga en [[fallthrough]]; instruktion där genomgången sker.

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

Ett annat sätt att åtgärda problemet är att ta bort det implicita genomfallet.

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

Se även

ES.78: Förlita dig inte på implicit genomströmning i switch instruktioner