assert関数は、プログラムの不良(バグ)摘出を支援します。引数の値が0の場合は、標準エラー出力にエラーメッセージを表示し、さらにabort関数を呼び出すことによって、プログラムを終了させます。なお、assert関数はマクロとして定義されています。

#include <assert.h>
void assert(int exp);

expは、値をチェックしたい変数を指定します。

assert関数は、NDEBUGマクロが定義されていた場合は何もしません。従って、次の例題の2行目のコメントを外すと、assert関数は無効になります。

プログラム 例

#include <stdio.h>
/* #define NDEBUG */
#include <assert.h>

int main(void)
{
  int    loop_cnt;
  int    in_data;

  for (loop_cnt = 1; loop_cnt <= 5; ++loop_cnt) {
    printf('0以外の整数の値を入力してください ==> ');
    scanf('%d', &in_data);

    /* in_dataの値が0の場合、異常終了 */
    assert(in_data);
  }

  return 0;
}

例の実行結果

$ ./assert.exe
0以外の整数の値を入力してください ==> 1
0以外の整数の値を入力してください ==> 2
0以外の整数の値を入力してください ==> 3
0以外の整数の値を入力してください ==> 0
assert.exe: assert.c:15: main: Assertion `in_data' failed.
アボートしました
$