C4571 (úroveň 4) upozornění kompilátoru
Informační: sémantika catch(...) změnilo Visual C++ 7.1; již byly uloveny strukturované výjimky (SEH)
C4571 je generován pro každý blok catch(...) při kompilaci s /EHs.
Při kompilaci s /EHs, catch(...) bloku nezachytí strukturované výjimky (dělení nulou ukazatele null například); catch(...) blok bude pouze úlovku explicitně vyvolána, C++ výjimky.Další informace naleznete v tématu Zpracování výjimek v jazyce Visual C++.
Ve výchozím nastavení je vypnuto upozornění.Zapnout toto varování, aby při kompilaci s /EHs vaše bloky catch (...) nemáte v úmyslu zachytit strukturované výjimky.Další informace naleznete v tématu Upozornění kompilátoru, která jsou ve výchozím nastavení vypnuté.
C4571 lze vyřešit jedním z následujících způsobů
Kompilace s /EHa Pokud stále chcete vaše catch(...) bloky zachytit strukturované výjimky.
C4571 povolení, pokud nechcete, aby vaše catch(...) bloky zachytit strukturované výjimky, ale chcete použít catch(...) bloky.Stále o úlovcích strukturované výjimky pomocí structured exception zpracování klíčová slova (__try, __except, a __finally).Ale nezapomeňte, že při zkompilován /EHs destruktory bude volána pouze v případě, že je vyvolána výjimka C++, není dojde k výjimce SEH.
Nahradit bloky catch pro specifické výjimky C++ catch(...) bloku a doplňte structured exception zpracování kolem zpracování výjimek C++ (__try, __except, a __finally).Další informace naleznete v tématu Structured Exception zpracování (C++).
Další informace naleznete v tématu /EH (Model zpracování výjimek).
Příklad
Následující ukázka 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
}