Heim > Artikel > Backend-Entwicklung > Microsoft C++-Spracherweiterung: strukturierte Ausnahmen mit Try-Exception-Anweisung
Die
Microsoft Proprietary
try-exclusive-Anweisung ist eine Microsoft C++-Spracherweiterung, die es einer Anwendung ermöglicht, die Ausführung ordnungsgemäß zu beenden, falls sie auftritt Kontrolle über das Programm zu erlangen. Solche Ereignisse werden als Ausnahmen bezeichnet, und der Mechanismus zur Behandlung von Ausnahmen wird als strukturierte Ausnahmebehandlung bezeichnet.
Ausnahmen können hardware- oder softwarebasiert sein. Selbst wenn sich eine Anwendung nach einer Hardware- oder Software-Ausnahme nicht vollständig erholen kann, kann eine strukturierte Ausnahmebehandlung durch die Anzeige von Fehlerinformationen und die Erfassung des internen Status der Anwendung bei der Diagnose des Problems helfen. Dies ist besonders nützlich bei zeitweise auftretenden Problemen, die nicht einfach reproduziert werden können.
try-exclusive-statement:
__try compound-statement
__exclusive ( expression ) compound-statement
__try
Die zusammengesetzte Anweisung nach der Klausel ist ein geschützter Abschnitt . Die zusammengesetzte Anweisung nach der __except
-Klausel ist der Ausnahmebehandler. Wenn während der Ausführung eines Steuerabschnitts eine Ausnahme ausgelöst wird, gibt der Handler eine Reihe von Aktionen an, die ausgeführt werden sollen. Der Ausführungsprozess ist wie folgt:
Führen Sie den geschützten Abschnitt aus.
__except
-Klausel fortgesetzt.
__except
-Ausdruck ausgewertet und der zurückgegebene Wert bestimmt die Ausnahmeverarbeitungsmethode. Es gibt drei Werte: EXCEPTION_CONTINUE_SEARCH
Die Ausnahme wird nicht erkannt. Durchsuchen Sie den Stapel weiter nach Handlern, zuerst nach der try-exclusive-Anweisung und dann nach dem Handler mit der nächsthöheren Priorität.
EXCEPTION_CONTINUE_EXECUTION
Ausnahme erkannt, aber geschlossen. Die Ausführung wird an der Stelle fortgesetzt, an der die Ausnahme aufgetreten ist.
EXCEPTION_EXECUTE_HANDLER
Ausnahmen können identifiziert werden. Übertragen Sie die Kontrolle über den Ausnahmehandler, indem Sie die zusammengesetzte Anweisung __except
ausführen und dann die Ausführung dort fortsetzen, wo die Ausnahme aufgetreten ist.
Da der __except
-Ausdruck als C-Ausdruck ausgewertet wird, ist er auf einen einzelnen Wert, den bedingten Ausdrucksoperator oder den Kommaoperator, beschränkt. Wenn eine umfangreichere Verarbeitung erforderlich ist, kann der Ausdruck eine Routine aufrufen, die einen der drei oben aufgeführten Werte zurückgibt.
Beschreibung | ||||
---|---|---|---|---|
|
Beschreibung |
---|
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 ihren eigenen Ausnahmehandler haben. __except
-Ausdrücke werden im Rahmen des __try
-Körpers ausgeführt. Das bedeutet, dass es auf alle dort deklarierten lokalen Variablen zugreifen kann. Das Schlüsselwort
__leave
ist im Anweisungsblock try-exclusive gültig. Der Effekt von __leave
besteht darin, zum Ende des try-exclusive-Blocks zu springen. Die Ausführung wird fortgesetzt, nachdem der Ausnahmehandler beendet ist. Obwohl das gleiche Ergebnis mit der goto
-Anweisung erzielt werden kann, bewirkt die goto
-Anweisung, dass der Stapel abgewickelt wird. Da die __leave
-Anweisung kein Stapelabwickeln beinhaltet, ist sie effizienter.
Die Verwendung der longjmp
-Laufzeitfunktion zum Verlassen der try-exclusive-Anweisung wird als abnormale Beendigung betrachtet. Zur __try
-Anweisung zu springen ist illegal, aber aus ihr herauszuspringen ist legal. Wenn ein Prozess während der Ausführung einer try-exclusive-Anweisung abbricht, wird der Ausnahmehandler nicht aufgerufen.
Beispiel
Im Folgenden finden Sie Beispiele für Ausnahmehandler und Beendigungshandler. Weitere Informationen zu Beendigungshandlern finden Sie in der try-finally-Anweisung.
. . . 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");
Hier ist die Ausgabe des obigen Beispiels mit rechts hinzugefügten Kommentaren:
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 */
Ende Microsoft-spezifischer
Verwandte Artikel:
Helloworld-Erweiterung der C-Sprache PHP
C-Sprachstrukturfunktion: Der Unterschied zwischen PHP-Sprachstruktur und -funktion
Das obige ist der detaillierte Inhalt vonMicrosoft C++-Spracherweiterung: strukturierte Ausnahmen mit Try-Exception-Anweisung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!