Warnung C26819
Fallthrough-Attribut ohne Anmerkungen zwischen switch-Bezeichnungen (es. 78).
Hinweise
Diese Überprüfung behandelt implizite Fallthrough in Switch-Anweisungen. Implizite Fallthrough ist der Fall, wenn Steuerungsflussübertragungen von einem Switch-Fall direkt in einen folgenden Switch-Fall ohne Verwendung der [[fallthrough]];
Anweisung erfolgt. Diese Warnung wird ausgelöst, wenn in einem Switch-Case mit mindestens einer Anweisung eine implizite Fallthrough erkannt wird.
Weitere Informationen finden Sie unter ES.78: Verlassen Sie sich nicht auf implizite Fallthrough in switch
Anweisungen in den C++ Core Guidelines.
Beispiel
In diesem Beispiel tritt implizite Fallthrough von einer nicht leeren switch
case
in eine Folgende case
auf.
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;
}
}
Um dieses Problem zu beheben, fügen Sie eine [[fallthrough]];
Anweisung ein, in der die Fallthrough auftritt.
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;
}
}
Eine weitere Möglichkeit zum Beheben des Problems besteht darin, die implizite Fallthrough zu entfernen.
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;
}
}
Weitere Informationen
ES.78: Verlassen Sie sich nicht auf implizite Fallthrough in switch
Anweisungen