Upozornění kompilátoru (úroveň 4) C4571
Informační: sémantika catch(...) změnila 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(...) blok nezachytí strukturované výjimky (dělení nulou, nulový ukazatel, například); catch(...) blok bude pouze úlovek explicitně vyvolány, výjimky C++. Další informace naleznete v tématu Zpracování výjimek v jazyce Visual C++.
Toto upozornění je vypnuto ve výchozím nastavení. Toto upozornění zapnutí zajistit, aby při kompilaci s /EHs vaše bloky catch (...) v úmyslu zachytit strukturované výjimky. Další informace naleznete v tématu Upozornění kompilátoru, která jsou ve výchozím natavení vypnuta..
C4571 můžete vyřešit jedním z následujících způsobů
Kompilace s /EHa Pokud chcete i nadále vaše bloky catch(...) zachytit strukturované výjimky.
C4571 nepovolujte, pokud nechcete, aby vaše bloky catch(...) zachytit strukturované výjimky, ale přesto chcete používat bloky catch(...). Stále můžete zachytit strukturované výjimky pomocí strukturované výjimky zpracování klíčových slov (__try, __except, a __finally). Ale nezapomeňte, že při kompilaci /EHs destruktory bude volat pouze při vyvolání výjimek v C++, není v případě, že dojde k výjimce SEH.
Nahraďte catch(...) blok catch bloky pro specifické výjimky C++ a volitelně přidat kolem zpracování výjimek C++ zpracování strukturovaných výjimek (__try, __except, a __finally). Další informace naleznete v tématu Strukturované zpracování výjimek (C/C++).
Další informace naleznete v tématu /EH (model zpracování výjimek).
Příklad
Následující ukázka generuje upozornění 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
}