ユーザーフレンドリな assert() の使い方

assert(fd < picoev.max_fd);

みたく書いてると、assertion が失敗した場合に表示されるエラーは、

Assertion failed: (fd < picoev.max_fd), function parse_hoge, file ..., line 15.

のような形になる。でもこれだと、何をチェックしているのか、ライブラリユーザーにはわからないわけで。そこで、

#define PICOEV_IS_INITIALIZED_AND_FD_IS_IN_RANGE (fd < picoev.max_fd)
...
assert(PICOEV_IS_INITIALIZED_AND_FD_IS_IN_RANGE);

のようにマクロを挟めば、

Assertion failed: (PICOEV_IS_INITALIZED_AND_FD_IS_IN_RANGE), function parse_hoge, file ..., line 17.

となって、猿でも分かるようになる。少なくとも手元の GCC では。マクロ展開的にどうなのかとかは面倒なので考えない。