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