関数名を取得するマクロ

[戻る]
DIO 2007/06/14(木) 20:06:18
Winxp VS2005

__LINE__ __FILE__のようにマクロを使って
そのマクロが記述されたところの関数の名前を取得できるような
マクロはありますか?

もしあれば教えてください。

また、無いのであれば便利そうなので作ってみようと思うのですが、
まったく方法論が浮かびません。

何かいいアイデアは無いでしょうか?

〜こうして、〜こうして・・・
見たいなあいまいなものでもかまいませんので、
ぜひ聞かせてください。

よろしくお願いします。

YuO [E-Mail] 2007/06/14(木) 20:58:26
__FUNCTION__
とか,
__FUNCDNAME__
とか,
__FUNCSIG__
でしょうか。
MSDN : Predefined Macros (C/C++) 
http://msdn2.microsoft.com/en-us/library/b0084kay(VS.80).aspx

なお,標準Cにおける関数名は__func__なので,移植を考える場合は注意が必要です。

Ban 2007/06/15(金) 21:59:03
GCCも__FUNCTION__通りますが、VC6は__FUNCTION__ないのですよね(まぁVC6は遺物なのでいまさ
らですが)
__func__もC99が必要ですし…。

Ban 2007/06/15(金) 22:01:46
> 何かいいアイデアは無いでしょうか?

コンパイラの機能を使わない/最も汎用的に?ということなら、自前プリプロセッサとか?

# BoostWaveとか改造すればいいのかな…やってみたことはありませんが。

2007/06/15(金) 22:27:10
関数名を取得する用のマクロを別の場所で定義して、コンパイラを判別した上で
全てで使えるマクロを定義しなおしておく。
ただし、関数名取得マクロが全く無い場合は、自前の関数名抽出プログラムで
作ったリストをインポートするようにする。
あたりでしょうか…。
これもマクロの展開ルールによってずれたりしそうなので難しいかも知れませんが。

関数名の取得が行われる場所が限定されているなら、関数の定義をマクロで
行っておくって手もありそうです。
その場合に文字列変数ではなく文字列定数として定義する方法は…あるんで
すかね?

es 2007/06/16(土) 00:40:06
boostにBOOST_CURRENT_FUNCTIONなんてものがありますが

DIO 2007/06/16(土) 19:25:28
[[解決]]
返信遅くなってすいません。

>YuOさん
まさにこれです。
ありがとうございます。

>Banさん

移植は考えていないので大丈夫ですが
C99版が一番汎用性高いのでしょうかね?

#自前のプリプロセッサは無理ですよ〜私には・・・(泣)

>麩

コンパイラごとで作ったらえらい労力ですね・・・

自前ファイルの解析はやっぱり別に作る(コンパイルと連動させない?)
のが現実的でしょうか?

>es

boostは手を出したい領域なんですが、
なかなか・・・

#とりあえず自作は断念です。はオードつたか過ぎ...

ありがとうございました。

古いスレッドには追加発言できません。