Upozornění kompilátoru (úroveň 1, chyba, vypnuto) C5262
implicitní pád se zde vyskytuje; Chybí
break
vám příkaz? Použití[[fallthrough]]
přibreak
úmyslném vynechání příkazu mezi případy
Poznámky
Tok řízení, který implicitně spadá mezi případy příkazů switch, je historickým zdrojem chyb pro jazyk C i C++. I když jsme měli __fallthrough
makro SAL, pro diagnostiku kompilátoru sestavení to nebylo užitečné. Vzhledem k tomu, že zákazníci mají starší kód, který "propadne" účelu, není možné dát upozornění s možností akce bez nějakého způsobu, jak indikovat úmyslné pády. V jazyce C++17 [[fallthrough]]
byl atribut přidán k označení takové instance. Kompilátor může tento atribut vzít v úvahu a potlačit nové upozornění.
Upozornění kompilátoru C5262 je v sadě Visual Studio 2022 verze 17.4 nové a ve výchozím nastavení je vypnuté a při povolení se považuje za chybu. Pokud chcete pokračovat v podpoře staršího kódu bez přerušení sestavení, musí být C5262 explicitně povolený. Další informace o povolení tohoto upozornění najdete v tématu Upozornění kompilátoru, která jsou ve výchozím nastavení vypnutá.
Příklad
Ukázkový kód ukazuje diagnostiku případů switch
, které procházejí bez break
příkazů nebo return
[[fallthrough]]
atributů.
// 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++;
*/
Pokud chcete tento problém vyřešit, když je tok řízení mezi případy úmyslný, použijte [[fallthrough]]
atribut.