Heim >Backend-Entwicklung >C++ >Was ist der Zweck und die Implementierung von __try in C unter Windows?

Was ist der Zweck und die Implementierung von __try in C unter Windows?

DDD
DDDOriginal
2024-11-07 15:04:02138Durchsuche

What is the Purpose and Implementation of __try in C   on Windows?

__try, try/catch/finally in C verstehen

In C werden die try/catch/finally-Blöcke typischerweise für die Ausnahmebehandlung verwendet . Es gibt jedoch eine alternative Syntax mit doppelten Unterstrichen, __try, die spezifisch für Windows ist.

Wann __try verwendet werden sollte

Unter Windows wird die Ausnahmebehandlung über Structured implementiert Ausnahmebehandlung (SEH). Bei der Ausrichtung auf Windows mit MSVC-Compilern kann die __try-Syntax verwendet werden, um SEH-Ausnahmen abzufangen.

SEH- und C-Ausnahmen

Der MSVC-Compiler generiert Code, der C-Ausnahmen zuordnet der SEH-Infrastruktur unter Verwendung des Ausnahmecodes 0xe06d7363 („msc“). Dadurch können C-Destruktoren aufgerufen werden, wenn eine SEH-Ausnahme ausgelöst wird.

Compiler-Optimierung für Destruktoren

Der MSVC-Compiler optimiert den Code, um die Generierung des Destruktorcodes zu vermeiden, falls vorhanden keine throw-Anweisung innerhalb der Lebensdauer des Objekts. Diese Optimierung kann mithilfe der Kompilierungsoption /EHa unterdrückt werden, die erforderlich ist, um alle SEH-Ausnahmen konsistent abzufangen.

SEH-Ausnahmetypen

SEH hat viele Ausnahmetypen, einschließlich der vom Betriebssystem definierten und der von bestimmten Anwendungen verwendeten. Verwaltete Ausnahmen wie .NET-Ausnahmen verwenden den Ausnahmecode 0xe0434f4d („com“).

__try, __exclusive und __finally

Um SEH-Ausnahmen abzufangen, __try wird in Verbindung mit __exclusive verwendet, das sich wie ein C-Catch-Block verhält, jedoch über mehr Funktionen verfügt. __finally ermöglicht die Ausführung von Code nach der Ausnahmebehandlung.

Beispielcode

Der bereitgestellte Code demonstriert die Verwendung von __try, __exclusive und __finally, um beide SEH-Ausnahmen abzufangen (verursacht durch den Zugriff auf einen Nullzeiger) und C-Ausnahmen (verursacht durch das Auslösen einer Ganzzahl).

Die Die Ausgabe zeigt, dass die Destruktoren für beide Ausnahmen aufgerufen werden und dass __exclusive die Ausnahmen erfolgreich abfängt.

Das obige ist der detaillierte Inhalt vonWas ist der Zweck und die Implementierung von __try in C unter Windows?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn