ア | イ | ウ | エ | オ |
カ | キ | ク | ケ | コ |
サ | シ | ス | セ | ソ |
タ | チ | ツ | テ | ト |
ナ | ニ | ヌ | ネ | ノ |
ハ | ヒ | フ | ヘ | ホ |
マ | ミ | ム | メ | モ |
ヤ | ユ | ヨ | ||
ラ | リ | ル | レ | ロ |
ワ | ヰ | ヴ | ヱ | ヲ |
ン |
A | B | C | D | E |
F | G | H | I | J |
K | L | M | N | O |
P | Q | R | S | T |
U | V | W | X | Y |
Z | 数字 | 記号 |
C/C++/Javaなどで、アサーションを行なうための使用するもの。Javaでは予約語だが、C/C++ではマクロである。
Javaでは予約語の一つである。
Javaのもともとの仕様(OAK)には存在していたものが、満足な設計と実装を行なう時間的余裕がなかったため、初期の公開仕様では削除されていた。
Java2 1.4で復活。
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に存在する。
コメントなどを投稿するフォームは、日本語対応時のみ表示されます