• ベストアンサー

C/C++ の __LINE__ マクロを文字列化する方法

C/C++ プリプロセッサの定義済みマクロ __LINE__ の数値を 文字列化する方法がわかる方、いますか ? # 演算子(マクロ?)を使ってもだめでした。 そもそも不可能なのでしょうか ? printf("%d\n", __LINE__); // 行番号(数値) : OK #define tostr(n) # n printf("%s\n", tostr(__LINE__); // 文字列化して表示 : NG # 「意味がない」という回答はカンベンしてください.。

質問者が選んだベストアンサー

  • ベストアンサー
  • jacta
  • ベストアンサー率26% (845/3158)
回答No.3

こんな感じでしょうか? #define tostr(n) tostr_(n) #define tostr_(n) #n printf("%s\n", tostr(__LINE__)); VC++で/ZIオプションを付けた場合には、 "(__LINE__Var+行番号)" という文字列になるので注意してください。

z64423
質問者

お礼

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

その他の回答 (2)

  • nitscape
  • ベストアンサー率30% (275/909)
回答No.2

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

  • alicia-y
  • ベストアンサー率40% (85/208)
回答No.1

char s[100]; sprintf(s, "%d", __LINE__); とかですかね。

z64423
質問者

補足

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

関連するQ&A