Ostrzeżenie C26819

Nieoznaczone upadek między etykietami przełączników (es.78).

Uwagi

Ta kontrola obejmuje niejawny upadek w instrukcjach switch. Niejawny upadek polega na tym, że przepływ sterowania przenosi się z jednego przypadku przełącznika bezpośrednio do następującego przypadku przełącznika bez użycia instrukcji [[fallthrough]]; . To ostrzeżenie jest zgłaszane po wykryciu niejawnego fallthrough w przypadku przełącznika zawierającego co najmniej jedną instrukcję.

Aby uzyskać więcej informacji, zobacz ES.78: Nie polegaj na niejawnej fallthrough instrukcji w switch wytycznych podstawowych języka C++.

Przykład

W tym przykładzie niejawny upadek występuje z elementu nonempty switchcase do następującego caseelementu .

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

Aby rozwiązać ten problem, wstaw instrukcję [[fallthrough]]; , w której występuje fallthrough.

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

Innym sposobem rozwiązania problemu jest usunięcie niejawnego fallthrough.

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

Zobacz też

ES.78: Nie polegaj na niejawnej fallthrough w switch instrukcjach