C言語編 標準ライブラリのリファレンス assert

先頭へ戻る

assertマクロ

概要 一定の条件式を満たしていることを確認する。
ヘッダ assert.h
形式 #ifdef NDEBUG
#define assert(expr) ((void)0)
#else
#define assert(expr) ((expr) ? (void)0 : __assert(#expr, __FILE__, __LINE__))
#endif
置換結果 NDEBUGマクロが定義されている場合には、空の式に置換される。
NDEBUGマクロが未定義であれば、条件式を判定し、真であれば空の式になる。 偽であれば、その旨を表す処理系定義の文字列を標準エラー出力した後、abort関数を呼び出す。
詳細 ほぼ、上記の「置換結果」に書いた通りである。
出力されるメッセージには、assertマクロに与えた実引数の並びを文字列化したもの、assertマクロを呼び出した個所のソースファイル名、行数が含まれる。後ろの2つは __FILE____LINE__ によるものである。これらの内容がどのような書式で構成されるかは処理系依存である。
C99 の場合、さらに呼び出した個所の関数名が出力される。これは、__func__ によるものである。
注意
使用例
#include <stdio.h>
#include <assert.h>

void myputs(const char* str);

int main(void)
{
    myputs( "abcde" );
    myputs( "" );
    myputs( NULL );

    return 0;
}

void myputs(const char* str)
{
    assert( str != NULL );
    puts( str );
}

実行結果:

abcde

Assertion failed: str != NULL, file c:\main.c, line 17
関連
解説章 第30章


参考リンク



更新履歴

'2018/4/4 「詳細」をより詳細にした。
実行結果に、assertマクロが出力する文字列が掲載されていなかったので、追加した。

'2018/1/22 新規作成。



標準ライブラリのリファレンス(名前順)のトップページへ

標準ライブラリのリファレンス(ヘッダ別)のトップページへ

C言語編のトップページへ

Programming Place Plus のトップページへ


はてなブックマーク Pocket に保存 Twitter でツイート Twitter をフォロー
Facebook でシェア Google+ で共有 LINE で送る rss1.0 取得ボタン RSS
管理者情報 プライバシーポリシー