Provided by: manpages-ja-dev_0.5.0.0.20221215+dfsg-1_all bug

名前

       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 では expressionint 型であることが必要とされ、そうでない場
       合の動作は未定義とされていた。 しかし C99 ではどのようなスカラ値でもよいことになった。

バグ

       assert() は、マクロとして実装されている。すなわち、評価されている式が副作用を持っている場合には、プログラ
       ムの振舞いは、マクロ  NDEBUG が定義されているかによって異なるだろう。このため、デバッグを有効にすると消え
       てしまうハイゼンバグ (Heisenbugs) が起こることがある。

関連項目

       abort(3), assert_perror(3), exit(3)

この文書について

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