C++/標準ライブラリ/cassert
表示
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でないことを保証しています。条件を満たさない場合は、プログラムを異常終了させることで、バグの原因を特定しやすくなります。