Sdílet prostřednictvím


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
}