C++教科書/標準ライブラリ編/<cassert>の章

編集

概要

編集

<cassert>ヘッダーは、エラー処理ライブラリの一部であり、プログラム内でアサーション(条件)を記述するためのマクロassertを提供します。このヘッダーは、もともとC標準ライブラリの<assert.h>として存在していました。

マクロ

編集

assert

編集
#define assert(E) /* 実装定義の効果 */

assertマクロは、引数Eの条件式がfalseであった場合に、プログラムを異常終了させます。Eには、任意の値算出式を指定することができます。

通常、assertマクロは、デバッグビルドでは有効になり、リリースビルドでは無効になるように設定されます。リリースビルドでassertマクロが実行されるとパフォーマンスが低下するためです。

assertマクロが実行された際の動作は実装定義ですが、一般的には以下のようになります。

  • 条件式Efalseの場合、プログラムを異常終了させる(abort)
  • 条件式Etrueの場合、何も行わない

異常終了する前に、エラーメッセージを出力したり、デバッグ情報を書き出したりする実装も存在します。

使用例

編集
#include <cassert>

int divide(int a, int b) {
    // bが0でないことをアサート
    assert(b != 0);
    return a / b;
}

int main() {
    int x = divide(10, 2); // OK
    int y = divide(10, 0); // assertで異常終了
    return 0;
}

assertマクロは、プログラムのデバッグ時に、特定の条件が成り立つことを保証するために使用します。上の例では、bが0でないことを保証しています。条件を満たさない場合は、プログラムを異常終了させることで、バグの原因を特定しやすくなります。