assert() — 条件の検証
形式
#include <assert.h>
void assert(int expression);言語レベル
ANSI
スレッド・セーフ
いいえ
説明
assert() 関数は、 expression が false (ゼロ) の場合、診断メッセージを stderr に出力し、プログラムを打ち切ります。 診断メッセージは、コンパイル時に使用された言語レベルに応じて、以下のいずれかのフォーマットになります。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() 関数はマクロとして定義されます。 #undef ディレクティブを assert()と一緒に使用しないでください。例
この例では、
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
*****************************************************************/