assert

読み:アサート
外語:assert 英語
発音:əsə́:rt 英語
品詞:名詞

C/C++/Javaなどで、アサーションを行なうための使用するもの。Javaでは予約語だが、C/C++ではマクロである。

目次

Java

Javaでは予約語の一つである。

Javaのもともとの仕様(OAK)には存在していたものが、満足な設計と実装を行なう時間的余裕がなかったため、初期の公開仕様では削除されていた。

Java2 1.4で復活。

C/C++

マクロ

C/C++ではマクロで、与えらえた式がだった場合にはプログラムの実行が終了する。

NDEBUG(No Debugの意)というプリプロセッサーシンボルが定義されている場合は、マクロ全体が「(void)0」のような最適化後に消滅する式に置換されるため、パフォーマンスの低下を避けることが可能。

書式

マクロなので、使用するにはincludeが必要。

#include <assert.h>

assert(条件式)

定義

FreeBSDでは、assert.hで次のように実装されている。

#ifdef NDEBUG

#define assert(e) ((void)0)

#define _assert(e) ((void)0)

#else

#define _assert(e) assert(e)

#define assert(e) ((e) ? (void)0 : __assert(__func__, __FILE__, __LINE__, #e))

#endif

NDEBUGがある場合は常時、そうでなくてもassertの条件式eが真なら、マクロは(void)0になり、コンパイルの段階で最適化により消滅する。

逆に、NDEBUGが無く、assertの条件式eが偽なら、エラー表示後プログラムを強制終了(abort();)する関数__assertを呼び出すことになる。この関数は標準Cライブラリ内にあり、ソースは/usr/src/lib/libc/gen/assert.cに存在する。

関連する用語
アサーション
static_assert

コメントなどを投稿するフォームは、日本語対応時のみ表示されます


KisoDic通信用語の基礎知識検索システム WDIC Explorer Version 7.04a (27-May-2022)
Search System : Copyright © Mirai corporation
Dictionary : Copyright © WDIC Creators club