Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Niet-geannoteerde doorval tussen switch-labels (es.78).
Opmerkingen
Deze controle behandelt impliciete fallthrough in switch-instructies. Impliciete fallthrough is wanneer de controlestroom wordt overgedragen van één switchcase rechtstreeks naar een volgende switchcase zonder het gebruik van de [[fallthrough]]; instructie. Deze waarschuwing wordt gegenereerd wanneer een impliciete fallthrough wordt gedetecteerd in een switchcase met ten minste één instructie.
Zie ES.78 voor meer informatie: Vertrouw niet op impliciete fallthrough in switch instructies in de C++-kernrichtlijnen.
Voorbeeld
In dit voorbeeld vindt impliciete fallthrough plaats van een niet-lege switchcase naar een volgende case.
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;
}
}
U kunt dit probleem oplossen door een [[fallthrough]]; instructie in te voegen waarin de fallthrough plaatsvindt.
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;
}
}
Een andere manier om het probleem op te lossen, is door de impliciete fallthrough te verwijderen.
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;
}
}
Zie ook
ES.78: Vertrouw niet op impliciete overgang in switch verklaringen