Warnung C26819

Nicht kommentierte Fallthrough zwischen Switchbezeichnungen (es.78).

Hinweise

Diese Überprüfung behandelt implizite Fallthrough in Switch-Anweisungen. Implizite Fallthrough ist der Fall, wenn Steuerungsflussübertragungen von einem Switch-Fall direkt in einen folgenden Switch-Fall ohne Verwendung der [[fallthrough]]; Anweisung erfolgt. Diese Warnung wird ausgelöst, wenn in einem Switch case mit mindestens einer Anweisung eine implizite Fallthrough erkannt wird.

Weitere Informationen finden Sie unter ES.78: Verlassen Sie sich nicht auf implizite Fallthrough in switch Anweisungen in den C++-Kernrichtlinien.

Beispiel

In diesem Beispiel tritt implizite Fallthrough von einer nicht in switchcase eine Folgende caseauf.

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

Um dieses Problem zu beheben, fügen Sie eine [[fallthrough]]; Anweisung ein, in der die Fallthrough auftritt.

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

Eine weitere Möglichkeit zum Beheben des Problems besteht darin, die implizite Fallthrough zu entfernen.

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

Siehe auch

ES.78: Verlassen Sie sich nicht auf implizite Fallthrough in switch Anweisungen