try-except-Anweisung Anweisung (C)
Microsoft-spezifisch
Die try-except-Anweisung ist eine Microsoft-Erweiterung der Programmiersprache C, die Steuerung eines Programms Anwendungen ermöglicht, abgerufen werden, wenn Ereignisse, die normalerweise Ausführung beenden, auftreten.Diese Ereignisse werden Ausnahmen und den Mechanismus aufgerufen, die Abkommen Ausnahmen mit strukturierten Ausnahmebehandlung aufgerufen wird.
Ausnahmen können entweder Hardware oder softwarebasiertes sein.Auch wenn Anwendungen nicht von Hardware- oder Software-Ausnahmen sich vollständig selbst beheben können, können strukturierte Ausnahmebehandlung kann abgefangen und Fehlerinformationen Anzeigen der interne Zustand der Anwendung zu erleichtern, das Problem zu diagnostizieren.Dies ist besonders nützlich für periodische Probleme, die nicht leicht reproduziert werden können.
Syntax
TRY-ausgenommenAnweisung:
__try Verbundanweisung__except ( Ausdrucks ) Verbundanweisung
Die Verbundanweisung nach der __try-Klausel ist der abgesicherte Abschnitt.Die Verbundanweisung nach der __except-Klausel ist der Ausnahmehandler.Der Handler zeigt einen Satz von Aktionen durchgeführt werden soll, wenn eine Ausnahme während der Ausführung des abgesicherten Abschnitts ausgelöst wird.Die Ausführung wird fortgesetzt, wie folgt:
Der abgesicherte Abschnitt wird ausgeführt.
Wenn keine Ausnahme, die während der Ausführung des Abschnitts als abgesicherter auftritt, wird die Ausführung bei der Anweisung nach der __except-Klausel fort.
Wenn während der Ausführung eine Ausnahme auftritt oder als abgesicherter des Abschnitts in jeder Routine der abgesicherte Abschnitt aufruft, wird der__except Ausdruck ausgewertet, und der zurückgegebene Wert bestimmt, wie die Ausnahme verarbeitet wird.Es gibt drei Werte:
EXCEPTION_CONTINUE_SEARCH Ausnahme wurde nicht erkannt.Fahren Sie fort, um entlang der Aufrufliste für einen Handler, try-except zuerst zum enthaltenden von Anweisungen, für Handler mit folgender höchsten Priorität zu suchen.
EXCEPTION_CONTINUE_EXECUTION Ausnahme wird jedoch geschlossen erkannt.Fortsetzen der Ausführung an der Stelle fortgesetzt, an der die Ausnahme aufgetreten ist.
EXCEPTION_EXECUTE_HANDLER Ausnahme wurde erkannt.Steuerung der Ausnahmehandler, indem sie die __except Verbundanweisung ausführt, dann die Ausführung an der Stelle fortgesetzt, der die Ausnahme aufgetreten ist.
Da der __except Wechselstrom-Ausdruck als Ausdruck ausgewertet wird, wird er zu einem Einzelwert, um Operator des bedingten Ausdrucks oder den Operator Komma beschränkt.Wenn das erweiterte Verarbeitung erforderlich ist, kann der Ausdruck eine Routine aufrufen, die einen der drei Werte zurückgibt, die oben aufgelistet sind.
Hinweis |
---|
Strukturierte Ausnahmebehandlung arbeitet mit C- und C++-Quelldateien.Es ist daher nicht speziell für C++ entwickelt.Sie können sicherstellen, dass der Code portabler ist, indem Sie die C++-Ausnahmebehandlung verwenden.Die C++-Ausnahmebehandlung ist der Mechanismus behandelt und so viel flexibler, dass er beliebigen Typs Ausnahmen behandeln kann. |
Hinweis |
---|
Für C++-Programme sollte die C++-Ausnahmebehandlung anstelle der strukturierten Ausnahmebehandlung verwendet werden.Weitere Informationen finden Sie unter Ausnahmebehandlung in der C++-Sprachreferenz. |
Jede Routine in einer Anwendung kann einen eigenen Ausnahmehandler haben.Der __except Ausdruck wird im Kontext des __try Text aus.Dies bedeutet, dass sie Zugriff auf alle lokalen Variablen enthält, die es deklariert werden.
Das __leave-Schlüsselwort ist innerhalb eines Anweisungsblocks try-except gültig.Die Auswirkung von __leave wurde, bis zum Ende des try-except-Blocks zu wechseln.Die Ausführung wird nach dem Ende des Ausnahmehandlers fort.Obwohl eine goto-Anweisung verwendet werden kann, um das gleiche Ergebnis zu erreichen, verursacht eine Stapelentladung goto-Anweisung.Die __leave-Anweisung ist effizienter, da sie nicht Stapelentladung einschließt.
Eine try-except-Anweisung unter Verwendung der longjmp Beenden Laufzeitfunktion, wird als nicht ordnungsgemäße Beendigung.Es ist nicht zulässig, in __try eine Anweisung zu springen, sondern aus einer herauszuspringen gültig.Der Ausnahmehandler wird nicht aufgerufen, wenn ein Prozess noch das Ausführen einer try-except-Anweisung abgebrochen wird.
Beispiel
Nachfolgend ist ein Beispiel eines Ausnahmehandlers und des Beendigungshandlers.Weitere Informationen finden Sie unter Die Anweisung TRY--abschließend Informationen zu Beendigungshandler.
.
.
.
puts("hello");
__try{
puts("in try");
__try{
puts("in try");
RAISE_AN_EXCEPTION();
}__finally{
puts("in finally");
}
}__except( puts("in filter"), EXCEPTION_EXECUTE_HANDLER ){
puts("in except");
}
puts("world");
Dies ist die Ausgabe des Beispiels, wenn es sich bei dem Kommentar auf der rechten Seite hinzugefügt wurde:
hello
in try /* fall into try */
in try /* fall into nested try */
in filter /* execute filter; returns 1 so accept */
in finally /* unwind nested finally */
in except /* transfer control to selected handler */
world /* flow out of handler */
Microsoft ENDES bestimmten