ホームページ  >  記事  >  バックエンド開発  >  構造化例外処理 (SEH) は C で __try および try/catch/finally を使用してどのように機能しますか?

構造化例外処理 (SEH) は C で __try および try/catch/finally を使用してどのように機能しますか?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-07 13:11:03380ブラウズ

How Does Structured Exception Handling (SEH) Work in C   with __try and try/catch/finally?

__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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。