Mischen von C (strukturiert) und C++-Ausnahmen
Wenn Sie portablen Code schreiben möchten, wird die Verwendung der strukturierten Ausnahmebehandlung (SEH) in einem C++-Programm nicht empfohlen. Es kann jedoch vorkommen, dass Sie strukturierte /EHa
Ausnahmen und C++-Quellcode kompilieren und kombinieren möchten und eine Möglichkeit für die Behandlung beider Arten von Ausnahmen benötigen. Da ein strukturierter Ausnahmehandler kein Konzept von Objekten oder typierten Ausnahmen aufweist, kann er keine vom C++-Code ausgelösten Ausnahmen behandeln. C++ catch
-Handler können jedoch strukturierte Ausnahmen behandeln. C++-Ausnahmebehandlungssyntax (try
, throw
, catch
) wird vom C-Compiler nicht akzeptiert, aber die Syntax für die strukturierte Ausnahmebehandlung (__try
, __except
, __finally
) wird vom C++-Compiler unterstützt.
Informationen zum Behandeln von strukturierten Ausnahmen als C++-Ausnahmen finden Sie unter .See _set_se_translator
for information on how to handle structured exceptions as C++exceptions.
Wenn Sie strukturierte und C++-Ausnahmen kombinieren, beachten Sie diese potenziellen Probleme:
C++-Ausnahmen und strukturierte Ausnahmen können nicht innerhalb derselben Funktion gemischt werden.
Beendigungshandler (
__finally
Blöcke) werden immer ausgeführt, auch während des Abbruchs nach dem Auslösen einer Ausnahme.Die C++-Ausnahmebehandlung kann die Abspannsemantik in allen Modulen erfassen und beibehalten, die mit den
/EH
Compileroptionen kompiliert wurden, wodurch die Semantik entspannt werden kann.Es kann situationen geben, in denen Destruktorfunktionen nicht für alle Objekte aufgerufen werden. Eine strukturierte Ausnahme kann z. B. auftreten, wenn Sie versuchen, einen Funktionsaufruf über einen nicht initialisierten Funktionszeiger zu tätigen. Wenn es sich bei den Funktionsparametern um Objekte handelt, die vor dem Aufruf erstellt werden, werden die Destruktoren dieser Objekte während des Stapels nicht aufgerufen.
Nächste Schritte
Verwenden
setjmp
oderlongjmp
in C++-ProgrammenWeitere Informationen zur Verwendung von
setjmp
undlongjmp
in C++-Programmen.Behandeln strukturierter Ausnahmen in C++
Beispiele für die Verwendung von C++ zum Behandeln strukturierter Ausnahmen finden Sie in den Beispielen.
Siehe auch
Bewährte Methoden für moderne C++-Methoden für Ausnahmen und Fehlerbehandlung
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für