Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
implicitní pád se zde vyskytuje; Chybí
breakvá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é propadají 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.