C言語のお話

今日も今日とてソース解析。
だらだら追っかけてたら見慣れぬものが。



printf("%s(%d)@%s\n", __FILE__, __LINE__, __func__);


ん?__FILE__はともかく、__func__てなに(´・ω・`)?
書式が%sだから文字列だろうけど…え?func?まさか…?


実際に試してみた



#include

void hoge001()
{
  printf("%s\n", __func__);
}

void hoge002()
{
  printf("%s\n", __func__);
}

void main()
{
  printf("%s\n", __func__);

  hoge001();
  hoge002();
}


コンパイルー、実行ーえい!


main
hoge001
hoge002


ちょwwwなにこの素敵なマクロwwwえ?マクロ?なんだこれ(;´ロ`)
グーグル先生に聞いてみた。__func__ - Google 検索


やっぱりそのまんま。関数名が入ってるっぽい。
しかもC99からって前世紀からあるのかよっ気付けよ私っヽ(`○´)/
てかDirectXのDX_DebugStringだっけ?Trace?最近ご無沙汰なのでど忘れ。
あれでも使われてなかったような…


と言う訳で、デバッグにめちゃくちゃ役立ちそうな発見でした。

#define TRACE(x)  printf("%s(%d)@%s:%d\n", __FILE__, __LINE__, __func__, x)

こんなマクロ一つでデバッグ効率全然違うし。
知らなかった方はぜひ活用してみてください。


ちなみに↑で試したのはRedhutLinuxのgcc。VS.NET無いんですよ今の環境(;´ロ`)
VS.NETの環境で試せる人、試して結果教えてください某X社の人たちw
BCCだとどうなのかな?