| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
GNU CC は、現在の関数名を表す文字列変数を二つ前もって定義している。
変数 __FUNCTION__ は、ソースコードに現れた通りの関数名を表す。
変数 __PRETTY_FUNCTION__ は、言語に固有の形式で整形した関数名を
表す。
この二つは、C 言語の関数ではいつでも同じになるが、C++ の関数では 違ったものになる可能性がある。例えば、
extern "C" {
extern int printf (char *, ...);
}
class a {
public:
sub (int i)
{
printf ("__FUNCTION__ = %s\n", __FUNCTION__);
printf ("__PRETTY_FUNCTION__ = %s\n", __PRETTY_FUNCTION__);
}
};
int
main (void)
{
a ax;
ax.sub (0);
return 0;
}
|
というプログラムの出力は以下のようになる。
__FUNCTION__ = sub __PRETTY_FUNCTION__ = int a::sub (int) |
この二つの名前はマクロではなくて、定義済の文字列変数である。
例えば、関数の中で ‘#ifdef __FUNCTION__’ としても何も特別な
意味は持たない。プリプロセッサは __FUNCTION__ という識別子に
ついて何も特別な処理を行なわないからである。
This document was generated
using texi2html 1.78.