ASSERT

id:yaneuraoさんの話の中でASSERTの話が出てきたのでよい機会なので使おうかと思う。
コンパイラセットによってはASSERTマクロが事前定義されているようだが、カーネル内で使うので自前で適当に作ってみた。
自信がないので突っ込み募集・・・

#ifdef DEBUG_MODE
#define onAssertError() exit(1)
#define ASSERT(condition) {if (!(condition)) {printf("ASSERT failure %s:%d: %s\n", __FILE__, __LINE__, #condition);onAssertError();}}
#else
#define ASSERT(condition) {} // thanks! yaneuraoさん
#endif


onAssertError()は終了関数をラッピングしたものです。
DEBUG_MODEは、NDEBUGをあえて使わないようにしています。