MSVC での例外処理

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

例外の種類

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

  • C++ 例外処理

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

  • 構造化された例外処理

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

  • MFC 例外

    バージョン3.0 以降、MFC では C++ 例外が使用されていました。 従来の例外処理マクロもサポートしています。これは、フォームの C++ 例外に似ています。 MFC マクロと C++ 例外の混在に関するアドバイスについては、「 例外: Mfc マクロと C++ 例外の使用」を参照してください。

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

例外処理機構を混在させることはお勧めしません。 たとえば、構造化例外処理では、C++ 例外を使用しないでください。 C++ 例外処理を排他的に使用すると、コードの移植性が向上し、任意の型の例外を処理できるようになります。 構造化例外処理の欠点の詳細については、「 構造化例外処理」を参照してください。

このセクションの内容

こちらもご覧ください

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