関数名を取得するマクロ – プログラミング – Home

関数名を取得するマクロ
 
通知
すべてクリア

[解決済] 関数名を取得するマクロ


DIO
 DIO
(@DIO)
ゲスト
結合: 18年前
投稿: 62
Topic starter  

Winxp VS2005

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

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

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

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

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

よろしくお願いします。


引用未解決
トピックタグ
YuO
 YuO
(@YuO)
ゲスト
結合: 22年前
投稿: 320
 

__FUNCTION__
とか,
__FUNCDNAME__
とか,
__FUNCSIG__
でしょうか。
MSDN : Predefined Macros (C/C++)
http://msdn2.microsoft.com/en-us/library/b0084kay(VS.80).aspx

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


返信引用
Ban
 Ban
(@ban)
Prominent Member
結合: 5年前
投稿: 776
 

GCCも__FUNCTION__通りますが、VC6は__FUNCTION__ないのですよね(まぁVC6は遺物なのでいまさ
らですが)
__func__もC99が必要ですし…。


返信引用
Ban
 Ban
(@ban)
Prominent Member
結合: 5年前
投稿: 776
 

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

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

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


返信引用
麩
 麩
(@麩)
ゲスト
結合: 17年前
投稿: 95
 

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

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


返信引用
es
 es
(@es)
ゲスト
結合: 22年前
投稿: 17
 

boostにBOOST_CURRENT_FUNCTIONなんてものがありますが


返信引用
DIO
 DIO
(@DIO)
ゲスト
結合: 18年前
投稿: 62
Topic starter  

返信遅くなってすいません。

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

>Banさん

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

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

>麩

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

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

>es

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

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

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


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました