Microsoft 固有
try-Except Try-Except
ステートメントは、アプリケーションを終了できるようにする Microsoft C 言語拡張機能です。イベント発生時に通常通り実行され、プログラムの制御を取得します。このようなイベントは例外と呼ばれ、例外を処理するメカニズムは構造化例外処理と呼ばれます。 例外はハードウェアベースまたはソフトウェアベースである可能性があります。アプリケーションがハードウェア例外またはソフトウェア例外から完全に回復できない場合でも、構造化例外処理はエラー情報を表示し、アプリケーションの内部状態をキャプチャすることで問題の診断に役立ちます。これは、簡単に再現できない断続的な問題に特に役立ちます。 構文try-before-statement
:__try compound-statement
__Except ( expression ) compound-statement
__try
句の後の複合文守られているお祭りです。
#Except
保護されたセクションの実行中に例外が発生しなかった場合、実行は
__Except句の後のステートメントから続行されます。
保護されたセクションの実行中、または保護されたセクションによって呼び出されたルーチンで例外が発生した場合、
__Except
EXCEPTION_CONTINUE_SEARCH 例外は認識されません。スタックでハンドラーの検索を続けます。最初に try-excelEXCEPTION_CONTINUE_EXECUTION
EXCEPTION_EXECUTE_HANDLER
例外を識別できます。
__Except
__Except
例を示します |
---|
構造化例外処理は、C および C ソース ファイルに適用されます。ただし、これは C 専用に設計されたものではありません。 C 例外処理を使用すると、コードの移植性が向上します。さらに、C の例外処理メカニズムは、あらゆる種類の例外を処理できるため、はるかに柔軟です。 |
例を示します |
---|
C プログラムの場合は、構造化例外処理の代わりに C 例外処理を使用する必要があります。詳細については、『C 言語リファレンス』の「例外処理」を参照してください。 |
アプリケーション内の各ルーチンは、独自の例外ハンドラーを持つことができます。 __Except
式は、__try
本体のスコープ内で実行されます。これは、そこで宣言されたローカル変数にアクセスできることを意味します。
__leave
キーワードは、try-excel ステートメント ブロックで有効です。 __leave
の効果は、try-excel ブロックの最後にジャンプすることです。例外ハンドラーが終了すると、実行が再開されます。 goto
ステートメントを使用して同じ結果を得ることができますが、goto
ステートメントを使用するとスタックがアンロールされます。 __leave
ステートメントにはスタックの巻き戻しが含まれないため、より効率的です。
longjmp
ランタイム関数を使用して try-excel ステートメントを終了すると、異常終了とみなされます。 __try
ステートメントへのジャンプは違法ですが、ステートメントからのジャンプは合法です。 try-excel ステートメントの実行中にプロセスがキャンセルされた場合、例外ハンドラーは呼び出されません。
例
次に、例外ハンドラーと終了ハンドラーの例を示します。終了ハンドラーの詳細については、try-finally ステートメントを参照してください。
. . . 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");
これは、上記の例の出力であり、右側にコメントが追加されています:
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 固有の終了
関連記事:
以上がMicrosoft C++ 言語拡張: try-exc ステートメントの構造化例外の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。