ユーザーフレンドリな 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 では。マクロ展開的にどうなのかとかは面倒なので考えない。