C++教科書/標準ライブラリ編/<cassert>の章
編集概要
編集<cassert>
ヘッダーは、エラー処理ライブラリの一部であり、プログラム内でアサーション(条件)を記述するためのマクロassert
を提供します。このヘッダーは、もともとC標準ライブラリの<assert.h>
として存在していました。
マクロ
編集assert
編集
#define assert(E) /* 実装定義の効果 */
assert
マクロは、引数E
の条件式がfalse
であった場合に、プログラムを異常終了させます。E
には、任意の値算出式を指定することができます。
通常、assert
マクロは、デバッグビルドでは有効になり、リリースビルドでは無効になるように設定されます。リリースビルドでassert
マクロが実行されるとパフォーマンスが低下するためです。
assert
マクロが実行された際の動作は実装定義ですが、一般的には以下のようになります。
- 条件式
E
がfalse
の場合、プログラムを異常終了させる(abort) - 条件式
E
がtrue
の場合、何も行わない
異常終了する前に、エラーメッセージを出力したり、デバッグ情報を書き出したりする実装も存在します。
使用例
編集#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でないことを保証しています。条件を満たさない場合は、プログラムを異常終了させることで、バグの原因を特定しやすくなります。