__func__マクロが使えるのは、どのバージョンからか?
ネットを、ぼ〜っと回っていると、面白いネタが紹介されていました。
__FUNC__マクロというのが使えるようです。
で、どのバージョンから使えるのだろう?ってんで、少し関係する情報をかき集めてみる事にしました。
- 7.3 前定義識別名 __func__
http://seclan.dll.jp/c99d/c99d07.htm - フリーソフトウェア徹底活用講座(9) : 定義済みマクロ__func__と可変長引き数マクロ
http://www.cqpub.co.jp/interface/column/freesoft/2003/200305/2.htm - デバッグ出力
http://www.doumo.jp/aon-java/jsp/postgretips/tips.jsp?tips=45
ぱ〜っと調べてみると、以下のようです。
- __func__は、"前定義識別名"と呼ぶらしく、要するに、関数の名前が格納されるらしい
まぁ、__FILE__や__LINE__マクロと同じ動きですね - gccでは、結構昔から(2.95では既に実装済みみたい)用意されていたらしい
- C99で、__func__が、正式に定義されている
- VC6.0では定義されてないが、VC.NETでは定義されている
但し、__func__でなく__FUNCTION__という名前で(一応、VC.NET 2003と2005で確認済み)
余談ですが、VC.NETでは、類似マクロとして、__FUNCDNAME__と__FUNCSIG__があるようです。(参考: http://msdn2.microsoft.com/ja-jp/library/b0084kay(vs.80,en-us).aspx)
効果は、以下の通り。
#include <stdio.h> int main(void) { puts(__FUNCTION__); puts(__FUNCDNAME__); puts(__FUNCSIG__); return 0; } 実行結果: main main int __cdecl main(void)
なお、当然ですが、VC6.0では「定義されていない識別子です」と言われます。