アサーションとユーザー指定のメッセージ (C++)

C++ 言語では、アプリケーションのデバッグに役立つ 3 つのエラー処理機構、つまり #error ディレクティブstatic_assert キーワード、および assert Macro, _assert, _wassert マクロがサポートされます。 3 つの機構すべてはエラー メッセージを発行し、2 つはソフトウェアのアサーションもテストします。 ソフトウェアのアサーションは、プログラムの特定位置にある true となるはずの条件を指定します。 コンパイル時にアサーションが失敗した場合、コンパイラで診断メッセージが発行され、コンパイル エラーが発生します。 ランタイムのアサーションが失敗した場合、オペレーティング システムで診断メッセージが発行され、アプリケーションを終了します。

解説

アプリケーションの有効期間は、プリプロセス、コンパイル、および実行時フェーズで構成されます。 各エラー処理機構は、これらのいずれかのフェーズで使用できるデバッグ情報にアクセスします。 効果的にデバッグするには、そのフェーズに関する適切な情報を提供する機能を選択します:

  • #error ディレクティブは、プリプロセス時に有効です。 これは無条件にユーザー指定のメッセージを出力し、コンパイルはエラーで失敗します。 メッセージは、プリプロセッサ ディレクティブが操作するテキストを含むことができますが、結果の式は評価されません。

  • static_assert の宣言は、コンパイル時に有効になります。 これはブール型に変換できるユーザー指定の整数式で表されるソフトウェアのアサーションをテストします。 式がゼロ (false) に評価されると、ユーザー指定のメッセージが表示され、コンパイルはエラーで失敗します。

    static_assert の宣言は、テンプレート引数をユーザー指定の式に含めることができるため、テンプレートをデバッグする場合に特に便利です。

  • assert Macro, _assert, _wassert マクロは実行時に有効になります。 ユーザーが指定した式が評価され、結果がゼロの場合、システムは診断メッセージを発行し、アプリケーションを閉じます。 _ASSERT、_ASSERTE など、その他のマクロは、このマクロと似ていますが、システムまたはユーザーによって定義されているさまざまな診断メッセージを出力します。

関連項目

#error ディレクティブ (C/C++)
assert マクロ、_assert、_wassert
_ASSERT、_ASSERTE、_ASSERT_EXPR Macros
static_assert
_STATIC_ASSERT マクロ
テンプレート