Warnung C26819
Nicht kommentierte Fallthrough zwischen Switchbezeichnungen (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++-Kernrichtlinien.
Beispiel
In diesem Beispiel tritt implizite Fallthrough von einer nicht in switch
case
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;
}
}
Siehe auch
ES.78: Verlassen Sie sich nicht auf implizite Fallthrough in switch
Anweisungen
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für