次の方法で共有


混合の C (構造化)と C++ 例外

移植性のあるコードを記述する場合C.C++ プログラムの構造化例外処理を使用します。ただし**/EHa** してコンパイルすると構造化例外および C++ のソース・コードが混在する場合両方の種類の例外を処理する機能が必要です。構造化例外ハンドラーはオブジェクトまたは指定された例外の概念がないためC++ コードによってスローされた例外を処理できません ; ただしC++ Catch ハンドラーは構造化例外を処理できます。したがってC++ 例外処理の構文 (TrythrowC コンパイラ Catch) は構造化例外処理の構文 (__try__except__finally) によって C++ コンパイラでサポートされるのは使用されません。

C++ 例外として構造化例外処理の詳細については_set_se_translator を参照してください。

構造化および C++ の例外の場合は次の点に注意してください :

  1. C++ の例外と構造化例外は同じ関数内で使用されます。

  2. 例外がスローされた後 __finally 終了ハンドラー (ブロック) はアンワインド時に常に実行されます。

  3. C++ 例外処理をキャッチし/EH のコンパイラ オプションでコンパイルされたすべてのモジュールのアンワインド セマンティクス (このオプションはアンワインド セマンティクスは有効になります)。

  4. デストラクター関数がすべてのオブジェクトに対して呼び出されない場合があります。ただし初期化されていない関数ポインターを通じて関数呼び出しを実行しようとしてその関数として呼び出す前に作成したパラメーターのオブジェクトたとえば構造化例外が発生する場合これらのオブジェクトにアンワインドするスタック中に呼び出されたデストラクターはありません。

さらに詳しくは次のトピックをクリックしてください

参照

関連項目

C++ 例外処理