Freigeben über


Compilerwarnung (Ebene 4) C4571

Information: catch(...) Seit Visual C++ 7.1 geänderte Semantik; strukturierte Ausnahmen (SEH) werden nicht mehr abgefangen.

C4571 wird für jeden catch(...) Block generiert, wenn Sie die /EHs Compileroption angeben.

Hinweise

Wenn Sie die /EHs Compileroption angeben, catch(...) erfassen Blöcke keine strukturierten Ausnahmen. (Dividieren durch Null- oder Nullzeiger-Ausnahmen, z. B. Ein catch(...) Block fängt nur explizit C++-Ausnahmen ab. Weitere Informationen finden Sie unter Ausnahmebehandlung (Task Parallel Library).

Diese Warnung ist standardmäßig deaktiviert. Aktivieren Sie diese Warnung, um sicherzustellen, dass beim Kompilieren mit /EHs Ihren catch (...) Blöcken keine strukturierten Ausnahmen erfasst werden. Weitere Informationen finden Sie unter Compilerwarnungen, die standardmäßig deaktiviert sind.

Sie können C4571 auf eine der folgenden Arten auflösen:

  • Kompilieren Sie, /EHa wenn Ihre catch(...) Blöcke strukturierte Ausnahmen abfangen sollen.

  • Aktivieren Sie C4571 nicht, wenn Sie nicht möchten, dass Ihre catch(...) Blöcke strukturierte Ausnahmen abfangen, sie aber weiterhin Blöcke verwenden catch(...) möchten. Sie können strukturierte Ausnahmen weiterhin mithilfe der strukturierten Ausnahmebehandlung Schlüsselwort (keyword)s (__try, __exceptund __finally) abfangen. Denken Sie jedoch daran, dass beim Kompilieren mithilfe von /EHsDestruktoren nur aufgerufen wird, wenn eine C++-Ausnahme ausgelöst wird, nicht wenn eine SEH-Ausnahme auftritt.

  • Ersetzen Sie catch(...) Blöcke durch Catch-Blöcke für bestimmte C++-Ausnahmen, und fügen Sie optional eine strukturierte Ausnahmebehandlung um die C++-Ausnahmebehandlung (__try, __exceptund __finally) hinzu. weitere Informationen finden Sie unter Structured Exception Handling (C/C++) und (Exception Handling Model).For more information, see Structured Exception Handling (C/C++) and /EH (Exception Handling Model).

Beispiel

Im folgenden Beispiel wird C4571 generiert.

// 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
}