assert -
診断が偽の時にプログラムを中止する
#include <assert.h>
void assert(scalar expression);
このマクロは、プログラマが、プログラムのバグを見つけたり、例外的な場面を
(限定的なデバッグ出力を行う)
クラッシュで処理するのに役立つ。
expression が偽 (false) の場合
(つまり
expression が 0
と比較して等しい場合)、
assert()
はエラーメッセージを標準エラーに表示し、
abort(3)
を呼び出してプログラムを終了する。エラーメッセージには、以下のように、ファイル名、
assert()
の呼び出しを含む関数名、呼び出しのソースコードの行番号、引数のテキストが含まれる。
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/
に書かれている。