Sdílet prostřednictvím


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
}