Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
implicita fall-through sker här; Saknar du en
breakinstruktion? Använd[[fallthrough]]när enbreakinstruktion avsiktligt utelämnas mellan ärenden
Anmärkningar
Kontrollflöde som implicit faller mellan fall av växelinstruktioner är en historisk källa till buggar för både C och C++. Även om vi hade __fallthrough SAL-makrot var det inte användbart för build-compiler-diagnostiken. Eftersom kunder har äldre kod som "faller igenom" med flit är det inte möjligt att ge en åtgärdsvarning utan något sätt att indikera ett avsiktligt fall. I C++17 [[fallthrough]] lades attributet till för att indikera en sådan instans. Kompilatorn kan ta hänsyn till det här attributet och utelämna den nya varningen.
Kompilatorvarning C5262 är ny i Visual Studio 2022 version 17.4 och är både avstängd som standard och behandlas som ett fel som standard när det är aktiverat. Om du vill fortsätta att stödja äldre kod utan byggbrytningar måste C5262 uttryckligen aktiveras. Mer information om hur du aktiverar den här varningen finns i Kompilatorvarningar som är inaktiverade som standard.
Example
Exempelkoden visar diagnostik för switch fall som faller igenom utan break eller return instruktioner eller attributet [[fallthrough]] .
// 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++;
*/
Använd attributet för att lösa det här problemet när kontrollflödet mellan fallen är avsiktligt [[fallthrough]] .