kazmax - Linux で自宅サーバー

assert - ライブラリコールの説明 - Linux コマンド集 一覧表

  1. 名前
  2. 書式
  3. 説明
  4. 返り値
  5. 準拠
  6. バグ
  7. 関連項目

名前

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

書式

#include <assert.h>

void assert(scalar expression);

説明

<assert.h> が最後にインクルードされた時点で、 NDEBUG マクロが定義されていた場合、 assert ()マクロは何のコードも生成せず、従って全く何もしない。 さもなければ、 assert ()マクロは expression が偽の時(すなわち、比較の結果が0と等しい時)に 標準エラー出力にエラーメッセージを表示し、さらに abort ()を呼び出すことによって、プログラムを終了させる。

このマクロの目的は、プログラマーがプログラムのバグを発見する手助けを することである。"assertion failed in file foo.c, function do_bar(), line 1287" というメッセージはユーザーには何の助けにもならない。

返り値

値は返されない。

準拠

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

バグ

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

関連項目