namazu-dev(ring)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: use strerror()
Satoru Takabayashi <satoru-t@xxxxxxxxxxxxxxxxxx> wrote:
>>万が一、 MUST_NOT_BE_REACHED_HERE() にたどり着くと、
>>
>> foobar: foobar.c:342: MUST NOT BE REACHED HERE! Report bug!
>> zsh: 30148 abort (core dumped) foobar
>>
>>となります。
>>
>># こういうことをしているプログラムはどのくらいあるのだろう?
(snip)
>MUST_NOT_BE_REACHED_HERE() は悪くないアイディアだと思ったけ
>ど、ちょっと大げさすぎるので廃止しました。代わりに
などと言っていましたが、 Glib に同じ用途のマクロを見つけまし
た。しかも、もっと徹底しています。:)
| #ifdef __GNUC__
|
| #define g_assert(expr) G_STMT_START{ \
| if (!(expr)) \
| g_log (G_LOG_DOMAIN, \
| G_LOG_LEVEL_ERROR, \
| "file %s: line %d (%s): assertion failed: (%s)", \
| __FILE__, \
| __LINE__, \
| __PRETTY_FUNCTION__, \
| #expr); }G_STMT_END
|
| #define g_assert_not_reached() G_STMT_START{ \
| g_log (G_LOG_DOMAIN, \
| G_LOG_LEVEL_ERROR, \
| "file %s: line %d (%s): should not be reached", \
| __FILE__, \
| __LINE__, \
| __PRETTY_FUNCTION__); }G_STMT_END
#ifdef __GNUC__ のときに __PRETTY_FUNCTION__ マクロを用いて
関数名を取得しているところがいいです。さっそく
nmz_set_dyingmsg() マクロで真似しました。:-)
p.s.
Glib のソースを読んで勉強することにします。
-- Satoru Takabayashi