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