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