なぜあなたは考え__FILE__
て__TIME__
悪いのですか?それらが本当にマクロそのものであるかどうかはわかりません。それらはいわゆるマクロ名です。また、それらは標準で定義されていると思うので、安全で使用しても問題ないはずです。
余談ですが、コンパイル時の評価と実行時の評価の概念を見逃しているようです。
実行時にソースファイルの名前をどのように知ることができますか? そのため__FILE__
、コンパイラがファイル名を評価するので、 を使用する必要があります。
逆__TIME__
に、マクロ名もコンパイラによって置き換えられます。行がコンパイルまたは呼び出された時刻をログに記録しますか? 後者の場合は、適切なランタイム関数を使用する必要があります。
回りきる可能性は無いと思います__FILE__
。
ただし、通話を短くしたい場合は
次のスニペットを使用します。
#ifndef NDEBUG
#define DEBUG_MSG(msg) do{ std::cerr << __FILE__ << "(@" << __LINE__ << "): " << msg << '\n'; } while( false )
#else
#define DEBUG_MSG(msg) do{ } while ( false )
#endif
非常に移植性が高く使いやすいと思いますが、クラス メソッドとして使用するためのものではありません。おそらく次のように定義できます
#define DEBUG_MSG(msg) debug( msg, __FILE__, __LINE__ )
のように使用します
m_logger.DEBUG_MSG("message");
そのため、マクロは設計された関数呼び出しに展開されます。ただし、かなり危険です。署名を変更debug
すると、マクロを変更する必要があり、移植性がほとんどありません。