try-finally ステートメント (c)

Microsoft 固有の仕様 →

try-finally のステートメントはクリーンアップ コードの実行を保証するアプリケーションを有効にする C 言語のコード ブロックの実行が中断される場合は Microsoft の拡張機能です。クリーンアップは構成された最後のファイルメモリファイル ハンドルを解放することを解放などのタスクからします。try-finally のステートメントにチェックがルーチンの早期にはが発生する可能性があるエラーに対して実行された複数の場所が指定ルーチンに特に役立ちます。

  • try-finally ステートメント :
    __try複合ステートメント

    __finally複合ステートメント

__try 句で保護されたセクションした後で複合ステートメントを指定します。__finally 句の後の複合ステートメントを終了ハンドラーです。ハンドラーは流れ落ちるになっていることを保護されたセクションでは例外 (異常終了) や標準で終了するかどうかを保護されたセクションが終了したときに実行される一連のアクションを指定します (正常に終了します)。

単純なシーケンシャル実行することで __try ステートメントの数を制御します (流れ落ちるにある)。コントロールが __try のステートメントを入力すると関連ハンドラーがアクティブになります。実行は次のように検索されます :

  1. 保護されたセクションが実行されます。

  2. 終了ハンドラーが呼び出されます。

  3. 終了ハンドラーが完了すると実行が __finally のステートメントの後に従います。保護されたセクションの実行方法に関係なく制御フローが保護されたセクションの外に進む前に終了する (して保護された本体から goto のステートメントまたはステートメントの return)終了ハンドラーが実行されます。

__leave のキーワードは try-finally のステートメント ブロック内で使用できます。__leave の影響は try-finally ブロックの末尾に移動します。終了ハンドラーがすぐに実行されます。同じ結果を達成するために goto のステートメントは使用できますがgoto のステートメントによってスタックがアンワインドをします。__leave のステートメントはスタック アンワインドが含まれないので効率的です。

try-finally のステートメントを return のステートメントまたは longjmp のランタイム関数を使用して終了して異常終了と見なされます。__try のステートメントに進むことはできませんが外部にジャンプする留めるための 1 種類のできます。攻撃元とコピー先のファイルでアクティブな __finally のすべてのステートメントを実行する必要があります。これは 「と呼ばれますローカル アンワインド」

終了ハンドラーは try-finally のステートメントを実行中のプロセスが殺されれば呼び出されません。

[!メモ]

構造化例外処理ではC および C++ のソース ファイルを使用します。ただしC++ 向けに設計されていません。コードが C++ 例外処理を使用して汎用性のあることを確認します。またC++ 例外処理機構は任意の型の例外処理できるように非常に柔軟性があります。

[!メモ]

C++ プログラムではC++ 例外処理は構造化例外処理を使用する必要があります。詳細についてはC++ 言語リファレンスの 例外処理 を参照してください。

try-finally のステートメントの動作を確認するに ステートメントとを除く の例を参照してください。

終了 Microsoft 固有の仕様→

参照

関連項目

try-finally ステートメント