assert() — 条件の検証

フォーマット

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

言語レベル

ANSI

スレッド・セーフ

いいえ

説明

assert() 関数は診断メッセージを stderr に出力し、expression が false (ゼロ) の場合にプログラムを異常終了します。診断メッセージは、コンパイル時に使用された言語レベルに応じて、以下のいずれかのフォーマットになります。
Assertion failed: expression, file filename, line line-number.
Assertion failed: expression, file filename, line line-number, function function-name.

expression が true (ゼロ以外) の場合、assert() 関数は、アクションを実行しません。

プログラムの論理エラーを識別するには、assert() 関数を使用します。プログラムが意図したとおりに実行されている場合にのみ true を持つ expression を選択します。 プログラムをデバッグした後で、特別の非デバッグ ID NDEBUG を使用してプログラムから assert() 呼び出しを除去することができます。#define ディレクティブを使用して NDEBUG を任意の値に定義した場合、C プリプロセッサーはすべての assert 呼び出しを void 式に展開します。NDEBUG を使用する場合は、<assert.h> をプログラムに組み込む前に、NDEBUG を定義する必要があります。

戻り値

戻り値はありません。
注: assert() 関数はマクロとして定義されます。 assert() で #undef ディレクティブを使用しないでください。

この例では、assert() 関数がヌル・ストリングおよび空ストリングについて string をテストし、これらの引数を処理する前に length が正であることを確認します。
#include <stdio.h>
#include <assert.h>
 
void analyze (char *, int);
 
int main(void)
{
   char *string = "ABC";
   int length = 3;
 
   analyze(string, length);
   printf("The string %s is not null or empty, "
          "and has length %d ¥n", string, length);
}
 
void analyze(char *string, int length)
{
   assert(string != NULL);     /* cannot be NULL */
   assert(*string != '¥0');    /* cannot be empty */
   assert(length > 0);         /* must be positive */
}
 
/****************  Output should be similar to  ******************
The string ABC is not null or empty, and has length 3
*****************************************************************/