ASSERT(3)

名前
assert - 診断が偽の時にプログラムを中止する

書式
#include <assert.h>

void assert(scalar expression);

説明
This macro can help programmers find bugs in their programs, or handle exceptional cases via a crash that will produce limited debugging output.

If expression is false (i.e., compares equal to zero), assert() prints an error message to standard error and terminates the program by calling abort(3). The error message includes the name of the file and function containing the assert() call, the source code line number of the call, and the text of the argument; something like:

    prog: some_file.c:16: some_func: Assertion `val == 0' failed.

<assert.h> が最後にインクルードされた時点で、 NDEBUG マクロが定義されている場合、 assert() マクロは何のコードも生成せず、したがって全く何もしない。 assert() を使ってエラー条件を検出している場合に NDEBUG を定義するのは推奨されない。ソフトウェアの動作が非決定的になってしまう可能性があるからである。

返り値
値は返されない。

属性
この節で使用されている用語の説明については、 attributes(7) を参照。
インターフェース | 属性 | 値
assert() | Thread safety | MT-Safe

準拠
POSIX.1-2001, POSIX.1-2008, C89, C99. C89 では expression は int 型であることが必要とされ、そうでない場合の動作は未定義とされていた。 しかし C99 ではどのようなスカラ値でもよいことになった。

バグ
assert() は、マクロとして実装されている。すなわち、 試されている式が副作用を持っている場合には、 マクロ NDEBUG が定義されているかどうかに依存して、プログラムの振舞いは異なるだろう。 これによって、バグ出しするときには消えてしまう ハイゼンバグ(Heisenbugs)を生み出すだろう。

関連項目
abort(3), assert_perror(3), exit(3)

この文書について
この man ページは Linux man-pages プロジェクトのリリース 5.10 の一部である。プロジェクトの説明とバグ報告に関する情報は https://www.kernel.org/doc/man-pages/ に書かれている。