Partager via


Avertissement C26819

Procédure pas à pas non annotée entre les étiquettes de commutateur (es.78).

Notes

Cette case activée couvre les instructions switch implicites. La procédure pas à pas implicite est lorsque le flux de contrôle transfère directement d’un cas de commutateur directement dans un cas de commutateur suivant sans utiliser l’instruction [[fallthrough]]; . Cet avertissement est déclenché lorsqu’une erreur implicite est détectée dans un cas de commutateur contenant au moins une instruction.

Pour plus d’informations, consultez ES.78 : Ne vous fiez pas aux instructions implicites dans switch les instructions des instructions de base C++.

Exemple

Dans cet exemple, la procédure pas à pas implicite se produit d’une erreur switchcase nulle dans un code suivant 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;
    }
}

Pour résoudre ce problème, insérez une [[fallthrough]]; instruction dans laquelle la procédure de secours se produit.

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

Une autre façon de résoudre le problème consiste à supprimer la procédure de secours implicite.

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

Voir aussi

ES.78 : Ne vous fiez pas à la procédure de secours implicite dans switch les instructions