Winxp VS2005
__LINE__ __FILE__のようにマクロを使って
そのマクロが記述されたところの関数の名前を取得できるような
マクロはありますか?
もしあれば教えてください。
また、無いのであれば便利そうなので作ってみようと思うのですが、
まったく方法論が浮かびません。
何かいいアイデアは無いでしょうか?
~こうして、~こうして・・・
見たいなあいまいなものでもかまいませんので、
ぜひ聞かせてください。
よろしくお願いします。
__FUNCTION__
とか,
__FUNCDNAME__
とか,
__FUNCSIG__
でしょうか。
MSDN : Predefined Macros (C/C++)
http://msdn2.microsoft.com/en-us/library/b0084kay(VS.80).aspx
なお,標準Cにおける関数名は__func__なので,移植を考える場合は注意が必要です。
GCCも__FUNCTION__通りますが、VC6は__FUNCTION__ないのですよね(まぁVC6は遺物なのでいまさ
らですが)
__func__もC99が必要ですし…。
> 何かいいアイデアは無いでしょうか?
コンパイラの機能を使わない/最も汎用的に?ということなら、自前プリプロセッサとか?
# BoostWaveとか改造すればいいのかな…やってみたことはありませんが。
関数名を取得する用のマクロを別の場所で定義して、コンパイラを判別した上で
全てで使えるマクロを定義しなおしておく。
ただし、関数名取得マクロが全く無い場合は、自前の関数名抽出プログラムで
作ったリストをインポートするようにする。
あたりでしょうか…。
これもマクロの展開ルールによってずれたりしそうなので難しいかも知れませんが。
関数名の取得が行われる場所が限定されているなら、関数の定義をマクロで
行っておくって手もありそうです。
その場合に文字列変数ではなく文字列定数として定義する方法は…あるんで
すかね?
boostにBOOST_CURRENT_FUNCTIONなんてものがありますが
返信遅くなってすいません。
>YuOさん
まさにこれです。
ありがとうございます。
>Banさん
移植は考えていないので大丈夫ですが
C99版が一番汎用性高いのでしょうかね?
#自前のプリプロセッサは無理ですよ~私には・・・(泣)
>麩
コンパイラごとで作ったらえらい労力ですね・・・
自前ファイルの解析はやっぱり別に作る(コンパイルと連動させない?)
のが現実的でしょうか?
>es
boostは手を出したい領域なんですが、
なかなか・・・
#とりあえず自作は断念です。はオードつたか過ぎ...
ありがとうございました。