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.
Informační:
catch(...)sémantika se změnila od verze Visual C++ 7.1; strukturované výjimky (SEH) se už nezachytí.
Poznámky
C4571 se generuje pro každý catch(...) blok při zadání možnosti kompilátoru /EHs .
Když zadáte možnost kompilátoru /EHs , catch(...) bloky nezachytí strukturované výjimky. (Například vydělte nulou nebo výjimkou ukazatele null.) catch(...) Blok zachytává pouze explicitně vyvolané výjimky jazyka C++. Další informace naleznete v tématu Zpracování výjimek.
Toto upozornění je ve výchozím nastavení vypnuté. Zapněte toto upozornění, abyste zajistili, že při kompilaci s /EHscatch (...) bloky nezachytí strukturované výjimky. Další informace najdete v tématu Upozornění kompilátoru, která jsou ve výchozím nastavení vypnutá.
C4571 můžete vyřešit jedním z následujících způsobů:
Zkompilujte je,
/EHapokud chcete,catch(...)aby bloky zachytily strukturované výjimky.Nepovolujte C4571, pokud nechcete
catch(...), aby bloky zachytily strukturované výjimky, ale přesto chcete používatcatch(...)bloky. Strukturované výjimky můžete stále zachytit pomocí klíčových slov (,__trya__except) strukturovaného zpracování výjimek .__finallyNezapomeňte však, že při kompilaci pomocí/EHs, destruktory jsou volána pouze v případě, že je vyvolána výjimka jazyka C++, ne když dojde k výjimce SEH.Nahraďte
catch(...)bloky bloky catch pro konkrétní výjimky jazyka C++ a volitelně přidejte strukturované zpracování výjimek kolem zpracování výjimek jazyka C++ (__try,__excepta__finally). Další informace naleznete v tématu Strukturované zpracování výjimek (C/C++) a/EH(model zpracování výjimek).
Příklad
Následující příklad generuje C4571.
// C4571.cpp
// compile with: /EHs /W4 /c
#pragma warning(default : 4571)
int main() {
try {
int i = 0, j = 1;
j /= i; // this will throw a SE (divide by zero)
}
catch(...) {} // C4571 warning
}