Heim  >  Artikel  >  Backend-Entwicklung  >  Microsoft C++-Spracherweiterung: strukturierte Ausnahmen mit Try-Exception-Anweisung

Microsoft C++-Spracherweiterung: strukturierte Ausnahmen mit Try-Exception-Anweisung

php是最好的语言
php是最好的语言Original
2018-08-06 14:28:332737Durchsuche

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.

Syntax

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:

  1. Führen Sie den geschützten Abschnitt aus.

  2. Wenn während der Ausführung des geschützten Abschnitts keine Ausnahme auftritt, wird die Ausführung mit der Anweisung nach der __except-Klausel fortgesetzt.

  3. Wenn während der Ausführung des geschützten Abschnitts oder in einer vom geschützten Abschnitt aufgerufenen Routine eine Ausnahme auftritt, wird der __except-Ausdruck ausgewertet und der zurückgegebene Wert bestimmt die Ausnahmeverarbeitungsmethode. Es gibt drei Werte:
  4. 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.
  5. 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.

Microsoft C++-Spracherweiterung: strukturierte Ausnahmen mit Try-Exception-Anweisung Beschreibung
Microsoft C++-Spracherweiterung: strukturierte Ausnahmen mit Try-Exception-Anweisung 说明

结构化异常处理适用于 C 和 C++ 源文件。 但是,这不是专门为 C++ 设计的。 您可通过使用 C++ 异常处理来确保提高代码的可移植性。 此外,C++ 异常处理机制灵活得多,因为它可以处理任何类型的异常。

Die strukturierte Ausnahmebehandlung funktioniert für C- und C++-Quelldateien. Dies ist jedoch nicht speziell für C++ konzipiert. Sie können sicherstellen, dass Ihr Code besser portierbar ist, indem Sie die C++-Ausnahmebehandlung verwenden. Darüber hinaus ist der Ausnahmebehandlungsmechanismus von C++ viel flexibler, da er jede Art von Ausnahme behandeln kann.
Microsoft C++-Spracherweiterung: strukturierte Ausnahmen mit Try-Exception-Anweisung 说明

对于 C++ 程序,应使用 C++ 异常处理,而不是结构化异常处理。 有关详细信息,请参阅《C++ 语言参考》中的异常处理。

Microsoft C++-Spracherweiterung: strukturierte Ausnahmen mit Try-Exception-Anweisung 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!

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