Share via


終了ハンドラーに関する制約

goto ステートメントを使用して、__try ステートメント ブロックまたは __finally ステートメント ブロックにジャンプすることはできません。 代わりに、制御の標準フローに従ってステートメント ブロックに入る必要があります。 (ただし、ステートメント ブロックから飛び出 __try すことができます)。また、例外ハンドラーまたは終了ハンドラーをブロック内に入れ子に __finally することはできません。

終端ハンドラーに割り当てられた一部の種類のコードが生成する結果に問題がある場合があります。したがって、これらは慎重に使用する必要があります。 1 つは、__finally ステートメント ブロックの外部にジャンプする goto ステートメントです。 ブロックが正常終了の一部として実行される場合、特に異常は発生しません。 ただし、システムがスタックをアンワインドしている場合、そのアンワインドは停止します。 その後、現在の関数は、異常終了が発生した場合と同様に制御を取得します。

__finally ステートメント ブロック内の return ステートメントが、同じ状況を大まかに示します。 終了ハンドラーを含む関数の直前の呼び出し元に制御が戻ります。 システムがスタックをアンワインドしている場合、このプロセスは停止します。 その後、例外が発生した場合と同様にプログラムが続行されます。

関連項目

終了ハンドラーの記述
構造化例外処理 (C/C++)