2012年7月17日火曜日

C言語で関数名取得

C99で追加された__func__を使えばOK。

void foo(void) { printf("%s()\n", __func__); }
void bar(void) { printf("%s()\n", __func__); }
int main(void) {
  printf("%s()\n", __func__);
  foo();
  bar();
  return 0;
}

これを実行すると

main
foo
bar

と表示される。 __func__がコンテキストに応じて値が変わる、文字列定数のように振る舞うわけ。

ちなみに__FILE__や__LINE__とは異なり、__func__はプリプロセッサが処理するマクロではない。 プロプロセッサが関数まで踏み込むはずが無いから、当然と言えば当然だけど。

0 件のコメント:

コメントを投稿