MSVC での例外処理
例外とは、プログラムが通常の実行パスに沿って進むことを妨げるエラー状態のことであり、プログラムで制御できない可能性があります。 オブジェクトの作成、ファイルの入出力、および他のモジュールから行われる関数呼び出しを含む特定のアクションは、プログラムが正しく実行されている場合でも、すべて例外の潜在的な原因となります。 堅牢なコードは例外を予期し、それを処理します。 論理エラーを検出するには、例外ではなくアサーションを使用します (「アサーションの使用」を参照してください)。
例外の種類
Microsoft C++ コンパイラ (MSVC) では、次の 3 種類の例外処理がサポートされています。
-
ほとんどの C++ プログラムでは、C++ 例外処理を使用する必要があります。 これはタイプ セーフであり、スタック アンワインド中にオブジェクト デストラクターが呼び出されるようになります。
-
Windows には、構造化例外処理 (SEH) と呼ばれる独自の例外メカニズムがあります。 これは C++ または MFC プログラミングには推奨されません。 SEH は、MFC 以外の C プログラムでのみ使用します。
-
バージョン 3.0 以降、MFC では C++ 例外が使用されています。 形式上 C++ 例外に似ている以前の例外処理マクロは引き続きサポートされています。 MFC マクロと C++ 例外の併用に関するアドバイスについては、「例外: MFC マクロと C++ の例外の使用」を参照してください。
C++ プロジェクトで使用する例外処理モデルを指定するには、/EH コンパイラ オプションを使用します。 標準 C++ 例外処理 (/EHsc) は、Visual Studio での新しい C++ プロジェクトの既定です。
例外処理メカニズムを併用することはお勧めしません。 たとえば、C++ 例外を構造化例外処理と一緒に使用しないでください。 C++ 例外処理を使用すると、それだけでコードの移植性が高くなり、すべての種類の例外を処理できるようになります。 構造化例外処理の欠点の詳細については、「構造化例外処理」を参照してください。