名前空間
変種
操作

assert

提供: cppreference.com
< c‎ | error
ヘッダ <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 - スカラー型の式

[編集] 戻り値

(なし)

[編集]

#include <stdio.h>
// uncomment to disable 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

[編集] 参考文献

  • C11 standard (ISO/IEC 9899:2011):
  • 7.2.1.1 The assert macro (p: 186-187)
  • C99 standard (ISO/IEC 9899:1999):
  • 7.2.1.1 The assert macro (p: 169)
  • C89/C90 standard (ISO/IEC 9899:1990):
  • 4.2.1.1 The assert macro

[編集] 関連項目

(クリーンアップせずに)プログラムを異常終了させます
(関数) [edit]