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

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

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


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);
}

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 に保存 Facebook でシェア
X で ポストフォロー LINE で送る noteで書く
rss1.0 取得ボタン RSS 管理者情報 プライバシーポリシー
先頭へ戻る