Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
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 switch
case
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 : Ne vous fiez pas au passage implicite dans les instructions switch