名 前
assert − 診 断 が 偽 の 時 に プ ロ グ ラ ム を 中 止 す る
書 式
#include <assert.h>
void assert(scalar expression);
説 明
<assert.h> が 最 後 に イ ン ク ル ー ド さ れ た 時 点 で 、 NDEBUG マ ク ロ が 定 義 さ れ て い た 場 合 、 assert() マ ク ロ は 何 の コ ー ド も 生 成 せ ず 、 従 っ て 全 く 何 も し な い 。 さ も な け れ ば 、 assert(3) マ ク ロ は expression が 偽 の 時 (す な わ ち 、 比 較 の 結 果 が 0と 等 し い 時 )に 標 準 エ ラ ー 出 力 に エ ラ ー メ ッ セ ー ジ を 表 示 し 、 さ ら に abort() を 呼 び 出 す こ と に よ っ て 、 プ ロ グ ラ ム を 終 了 さ せ る 。 こ の マ ク ロ の 目 的 は 、 プ ロ グ ラ マ ー が プ ロ グ ラ ム の バ グ を 発 見 す る 手 助 け を す る こ と で あ る 。 "assertion failed in file foo.c, function do_bar(), line 1287" と い う メ ッ セ ー ジ は ユ ー ザ ー に は 何 の 助 け に も な ら な い 。
返 り 値
値 は 返 さ れ な い 。
準 拠
POSIX.1−2001, C89, C99. C89 で は expression は int 型 で あ る こ と が 必 要 と さ れ 、 そ う で な い 場 合 の 動 作 は 未 定 義 と さ れ て い た 。 し か し C99 で は ど の よ う な ス カ ラ 値 で も よ い こ と に な っ た 。
バ グ
assert() は 、 マ ク ロ と し て 実 装 さ れ て い る 。 す な わ ち 、 試 さ れ て い る 式 が 副 作 用 を 持 っ て い る 場 合 に は 、 マ ク ロ NDEBUG が 定 義 さ れ て い る か ど う か に 依 存 し て 、 プ ロ グ ラ ム の 振 舞 い は 異 な る だ ろ う 。 こ れ に よ っ て 、 バ グ 出 し す る と き に は 消 え て し ま う ハ イ ゼ ン バ グ (Heisenbugs)を 生 み 出 す だ ろ う 。
関 連 項 目
abort(3), assert_perror(3), exit(3)
こ の 文 書 に つ い て
こ の man ペ ー ジ は Linux man−pages プ ロ ジ ェ ク ト の リ リ ー ス 3.79 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は http://www.kernel.org/doc/man−pages/ に 書 か れ て い る 。