MSVC での例外処理

例外とは、プログラムが通常の実行パスに沿って進むことを妨げるエラー状態のことであり、プログラムで制御できない可能性があります。 オブジェクトの作成、ファイルの入出力、および他のモジュールから行われる関数呼び出しを含む特定のアクションは、プログラムが正しく実行されている場合でも、すべて例外の潜在的な原因となります。 堅牢なコードは例外を予期し、それを処理します。 論理エラーを検出するには、例外ではなくアサーションを使用します (「アサーションの使用」を参照してください)。

例外の種類

Microsoft C++ コンパイラ (MSVC) では、次の 3 種類の例外処理がサポートされています。

  • C++ 例外処理

    ほとんどの C++ プログラムでは、C++ 例外処理を使用する必要があります。 これはタイプ セーフであり、スタック アンワインド中にオブジェクト デストラクターが呼び出されるようになります。

  • 構造化例外処理

    Windows には、構造化例外処理 (SEH) と呼ばれる独自の例外メカニズムがあります。 これは C++ または MFC プログラミングには推奨されません。 Standard Edition H は、MFC 以外の C プログラムでのみ使用します。

  • MFC 例外

    バージョン 3.0 以降、MFC では C++ 例外が使用されています。 形式上 C++ 例外に似ている以前の例外処理マクロは引き続きサポートされています。 MFC マクロと C++ 例外の併用に関するアドバイスについては、「例外: MFC マクロと C++ の例外の使用」を参照してください。

C++ プロジェクトで使用する例外処理モデルを指定するには、/EH コンパイラ オプションを使用します。 標準 C++ 例外処理 (/EHsc) は、Visual Studio での新しい C++ プロジェクトの既定です。

例外処理メカニズムを併用することはお勧めしません。 たとえば、C++ 例外を構造化例外処理と一緒に使用しないでください。 C++ 例外処理を使用すると、それだけでコードの移植性が高くなり、すべての種類の例外を処理できるようになります。 構造化例外処理の欠点の詳細については、「構造化例外処理」を参照してください。

このセクションの内容

関連項目

C++ 言語リファレンス
x64 例外処理
例外処理 (C++/CLI および C++/CX)