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.
impliciete fall-through vindt hier plaats; Mist u een
breakverklaring? Gebruiken[[fallthrough]]wanneer eenbreakinstructie opzettelijk wordt weggelaten tussen gevallen
Opmerkingen
Controlestroom die impliciet valt tussen gevallen van switchinstructies is een historische bron van bugs voor zowel C als C++. Hoewel we de SAL-macro hadden, was het niet nuttig voor de diagnostische gegevens van de __fallthrough build-compiler. Omdat klanten verouderde code hebben die doelbewust 'doorloopt', is het niet mogelijk om een bruikbare waarschuwing te geven zonder een manier om een opzettelijke val aan te geven. In C++17 is het [[fallthrough]] kenmerk toegevoegd om een dergelijk exemplaar aan te geven. De compiler kan rekening houden met dit kenmerk en de nieuwe waarschuwing onderdrukken.
Compilerwaarschuwing C5262 is nieuw in Visual Studio 2022 versie 17.4 en is standaard uitgeschakeld en wordt standaard behandeld als een fout wanneer deze is ingeschakeld. Als u verouderde code zonder build-einden wilt blijven ondersteunen, moet C5262 expliciet zijn ingeschakeld. Zie Compiler-waarschuwingen die standaard zijn uitgeschakeld voor meer informatie over het inschakelen van deze waarschuwing.
Example
De voorbeeldcode toont diagnostische gegevens voor switch gevallen die zonder break of return instructies of het [[fallthrough]] kenmerk vallen.
// C5262.cpp
// compile using /std:c++17 /we5262
int main(int argc, char** argv)
{
switch (argc)
{
case 0: ++argv;
case 1:
case 2: argv++;
default:
argv = 0;
}
}
/*
When built, the compiler produces this output:
.\C5262.cpp(9,9): error C5262: implicit fall-through occurs here; are you missing a break statement? Use [[fallthrough]] when a break statement is intentionally omitted between cases
case 1:
^
.\C5262.cpp(8,17): note: statement that may fall through is here
case 0: ++argv;
^
.\C5262.cpp(11,9): error C5262: implicit fall-through occurs here; are you missing a break statement? Use [[fallthrough]] when a break statement is intentionally omitted between cases
default:
^
.\C5262.cpp(10,17): note: statement that may fall through is here
case 2: argv++;
*/
Gebruik het [[fallthrough]] kenmerk om dit probleem op te lossen wanneer de controlestroom tussen gevallen opzettelijk is.