assert
提供: cppreference.com
<tbody>
</tbody>
| ヘッダ <assert.h> で定義
|
||
#ifdef NDEBUG #define assert(condition) ((void)0) #else #define assert(condition) /*implementation defined*/ #endif |
||
マクロ assert の定義は、標準ライブラリで定義されない別のマクロ NDEBUG に依存します。
ソースコード内の <assert.h> がインクルードされた地点で NDEBUG がマクロ名として定義されている場合、 assert は何もしません。
NDEBUG が定義されていない場合、 assert は引数 (スカラー型を持たなければなりません) をゼロと等しいか比較します。 等しければ、 assert は処理系固有の診断情報を標準エラー出力に出力し、 abort() を呼びます。 診断情報は expression のテキスト、標準のマクロ __FILE__、 __LINE__ および定義済みの変数 __func__ (C99以上) の値を含むことが要求されます。
引数
| condition | - | スカラー型の式 |
戻り値
(なし)
例
Run this code
#include <stdio.h>
// 以下の行をコメント解除すると assert() は無効になります。
// #define NDEBUG
#include <assert.h>
#include <math.h>
int main(void)
{
double x = -1.0;
assert(x >= 0.0);
printf("sqrt(x) = %f\n", sqrt(x));
return 0;
}
出力:
output with NDEBUG not defined:
a.out: main.cpp:10: main: Assertion `x >= 0.0' failed.
output with NDEBUG defined:
sqrt(x) = -nan