Partager via


Avertissement C26819

Procédure non annotée entre les étiquettes switch (es.78).

Notes

Cette vérification couvre la procédure implicite dans les instructions switch. La procédure implicite consiste à transférer le flux de contrôle d’un cas switch directement dans un cas switch suivant, sans utiliser l’instruction [[fallthrough]];. Cet avertissement est déclenché lorsqu’une procédure implicite est détectée dans un cas switch contenant au moins une instruction.

Pour plus d’informations, consultezES.78: Don't rely on implicit fallthrough in switch statements (ES.78 : Ne pas se fier à la procédure dans les déclarations switch) dans les instructions de base C++.

Exemple

Dans cet exemple, la procédure implicite se produit à partir d’un case switch non vide dans un case suivant.

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 instruction [[fallthrough]]; où se produit la procédure.

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 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: Don't rely on implicit fallthrough in switch statements