[ < ] | [ > ] | [ << ] | [ 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.