Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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 switchcase 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