Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Aktualisiert: November 2007
Fehlermeldung
Information: Die catch(...)-Semantik hat sich seit Visual C++ 7.1 geändert; strukturierte Ausnahmen (SEH) werden nicht mehr abgefangen
Informational: catch(...) semantics changed since Visual C++ 7.1; structured exceptions (SEH) are no longer caught
C4571 wird bei Kompilierung mit /EHs für jeden catch(...)-Block generiert.
Beim Kompilieren mit /EHs wird eine strukturierte Ausnahme (z. B. Division durch 0 (null), Nullzeiger) nicht von einem catch(...)-Block aufgefangen; catch(...)-Blöcke fangen nur explizit ausgelöste C++-Ausnahmen auf. Weitere Informationen finden Sie unter Exception Handling in Visual C++.
Diese Warnung ist standardmäßig deaktiviert. Aktivieren Sie diese Warnung, um sicherzustellen, dass beim Kompilieren mit /EHs die catch(...)-Blöcke nicht zum Abfangen strukturierter Ausnahmen verwendet werden. Weitere Informationen finden Sie unter Compiler Warnings That Are Off by Default.
Zum Beheben des Fehlers C4571 bestehen folgende Möglichkeiten:
Kompilieren Sie mit /EHa, wenn catch(...)-Blöcke weiterhin strukturierte Ausnahmen abfangen sollen.
Aktivieren Sie C4571 nicht, wenn die catch(...)-Blöcke keine strukturierten Ausnahmen abfangen sollen, Sie jedoch catch(...)-Blöcke verwenden möchten. Sie können strukturierte Ausnahmen auch weiterhin abfangen, indem Sie die Schlüsselwörter für strukturierte Ausnahmebehandlung verwenden (__try, __except und __finally). Beachten Sie jedoch, dass kompilierte /EHs-Destruktoren nur bei Auslösung von C++-Ausnahmen aufgerufen werden, nicht bei SEH-Ausnahmen.
Ersetzen Sie catch(...)-Blöcke mit catch-Blöcken für bestimmte C++-Ausnahmen, und fügen Sie der C++-Ausnahmebehandlung wahlweise eine strukturierte Ausnahmebehandlung hinzu (__try, __except und __finally). Weitere Informationen finden Sie unter Structured Exception Handling (C++).
Weitere Informationen finden Sie unter /EH (Ausnahmebehandlungsmodell).
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
}