- ベストアンサー
C/C++ の __LINE__ マクロを文字列化する方法
C/C++ プリプロセッサの定義済みマクロ __LINE__ の数値を 文字列化する方法がわかる方、いますか ? # 演算子(マクロ?)を使ってもだめでした。 そもそも不可能なのでしょうか ? printf("%d\n", __LINE__); // 行番号(数値) : OK #define tostr(n) # n printf("%s\n", tostr(__LINE__); // 文字列化して表示 : NG # 「意味がない」という回答はカンベンしてください.。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こんな感じでしょうか? #define tostr(n) tostr_(n) #define tostr_(n) #n printf("%s\n", tostr(__LINE__)); VC++で/ZIオプションを付けた場合には、 "(__LINE__Var+行番号)" という文字列になるので注意してください。
その他の回答 (2)
- nitscape
- ベストアンサー率30% (275/909)
CAtlString str; str.Format("%d",__LINE__); やsprintf(psz,"%d",__LINE__); のようにしてはどうでしょうか?
- alicia-y
- ベストアンサー率40% (85/208)
char s[100]; sprintf(s, "%d", __LINE__); とかですかね。
補足
ちょっと質問がまずかったようです。 「C/C++ のプリプロセッサ」だけで (#define 等だけで)可能かどうかという意味です。 つまり、VC++ なら /P オプション、gcc なら -E オプション (どちらもうろ覚えですが)で プリプロセッサだけを動かして出力ファイル (*.i) を得た時点で __LINE__ を文字列にできるか、ということです。
お礼
gcc でためしてみました。 確かに文字列になってますね。 何故 #define を 2段にしないといけないのかが ?? てすが、可能だということがわかりました。 どうもありがとうございました。