Condividi tramite


Avviso C26819

Fallthrough non annotato tra etichette switch (es.78).

Osservazioni:

Questo controllo illustra il fallthrough implicito nelle istruzioni switch. Il fall-through implicito si verifica quando il flusso di controllo passa da un caso switch direttamente a un caso switch seguente senza l'uso dell'istruzione [[fallthrough]]; . Questo avviso viene generato quando viene rilevato un fallthrough implicito in un caso switch contenente almeno un'istruzione.

Per altre informazioni, vedere ES.78: Don't rely on implicit fallthrough in statements in the C++ Core Guidelines .For more information, see ES.78: Don't rely on implicit fallthrough in switch statements in the C++ Core Guidelines.

Esempio

In questo esempio, il fallthrough implicito si verifica da un valore nonempty switch case a un oggetto seguente 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;
    }
}

Per risolvere questo problema, inserire un'istruzione [[fallthrough]]; in cui si verifica il 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;
    }
}

Un altro modo per risolvere il problema consiste nel rimuovere il fallthrough implicito.

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

Vedi anche

ES.78: non basarsi su fallthrough implicito nelle switch istruzioni