__try および try/catch/finally を使用した C の構造化例外処理 (SEH)
C では、try/catch/finally ブロックコード ブロック内で例外を処理するメカニズムを提供します。ただし、Windows では、コンパイラは構造化例外処理 (SEH) と呼ばれる別のアプローチもサポートしています。
__try キーワードは、SEH 例外をキャッチできるようにする非標準キーワードです。 SEH 例外はオペレーティング システム レベルでサポートされており、オペレーティング システム自体から、または例外処理に SEH を使用するコードから例外をキャッチする方法を提供します。
__exc キーワードを使用すると、次のいずれかを決定する例外フィルター式を指定できます。そうでない場合は、アクティブな例外をキャッチする必要があります。これにより、特定の種類の例外を選択的に処理できます。
__finally キーワードを使用すると、例外が処理された後に実行されるコードを追加できます。これは、リソースの解放やファイルのクローズなどのクリーンアップ アクションを実行する場合に役立ちます。
SEH 例外は C 例外の上に実装されます。 C の例外は throw キーワードを使用してスローされ、catch キーワードを使用してキャッチできます。 C 例外がスローされると、コンパイラーは、__try/__Except ブロックでキャッチできる対応する SEH 例外を作成します。
EHa コンパイル オプションにより、コンパイラーは、作成されるオブジェクトのデストラクターを登録するコードを常に生成します。 try ブロックのスコープ内。これにより、非同期 SEH 例外が存在する場合でもデストラクターが確実に呼び出されます。
SEH 例外が C でどのようにキャッチされるかを示すために、次のプログラムを検討してください。
これを実行するときEHa コンパイル オプションが設定されたプログラムを実行すると、SEH 例外が発生した場合でも、Example オブジェクトのデストラクターが呼び出されることが出力に表示されます。これは、SEH 例外と C 例外を C コードでどのように一緒に処理できるかを示しています。
以上が構造化例外処理 (SEH) は C で __try および try/catch/finally を使用してどのように機能しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。