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 Ihrecatch(...)
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 verwendencatch(...)
möchten. Sie können strukturierte Ausnahmen weiterhin mithilfe der Schlüsselwörter für die strukturierte Ausnahmebehandlung (__try
,__except
und__finally
) erfassen. Denken Sie jedoch daran, dass beim Kompilieren mithilfe von/EHs
Destruktoren 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
,__except
und__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
}