通信用語の基礎知識 全国のICカードこれひとつ 戻る

通常PC用 / 人気 更新 今日 カテ
電子計算機 > 仕様・構造 > ソフトウェア > プログラミング言語 > 言語仕様 > 予約語・関数など
assert
辞書:電算用語の基礎知識 プログラミング仕様編 (PTPROGS)
読み:アサート
外語:assert
品詞:名詞

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

[再検索] [戻る]


通信用語の基礎知識検索システム WDIC Explorer Ver 7.03 (16-May-2019)
Search System : Copyright © Mirai corporation
Dictionary : Copyright © WDIC Creators club
KisoDic