プロが教える店舗&オフィスのセキュリティ対策術

C/C++ プリプロセッサの定義済みマクロ __LINE__ の数値を
文字列化する方法がわかる方、いますか ?

# 演算子(マクロ?)を使ってもだめでした。
そもそも不可能なのでしょうか ?


printf("%d\n", __LINE__); // 行番号(数値) : OK

#define tostr(n) # n
printf("%s\n", tostr(__LINE__); // 文字列化して表示 : NG

# 「意味がない」という回答はカンベンしてください.。

A 回答 (3件)

こんな感じでしょうか?



#define tostr(n) tostr_(n)
#define tostr_(n) #n
printf("%s\n", tostr(__LINE__));

VC++で/ZIオプションを付けた場合には、
"(__LINE__Var+行番号)"
という文字列になるので注意してください。
    • good
    • 0
この回答へのお礼

gcc でためしてみました。
確かに文字列になってますね。
何故 #define を 2段にしないといけないのかが ?? てすが、可能だということがわかりました。
どうもありがとうございました。

お礼日時:2005/02/15 21:10

CAtlString str;


str.Format("%d",__LINE__);
やsprintf(psz,"%d",__LINE__);
のようにしてはどうでしょうか?
    • good
    • 0

char s[100];


sprintf(s, "%d", __LINE__);

とかですかね。

この回答への補足

ちょっと質問がまずかったようです。
「C/C++ のプリプロセッサ」だけで (#define 等だけで)可能かどうかという意味です。
つまり、VC++ なら /P オプション、gcc なら -E オプション (どちらもうろ覚えですが)で
プリプロセッサだけを動かして出力ファイル (*.i) を得た時点で __LINE__ を文字列にできるか、ということです。

補足日時:2005/02/15 07:14
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!