コードにいくつかのタイプの出力メッセージを含めたいとしましょう。それらの1つはDEBUG
で、コードがデバッグモードでコンパイルされたときにのみ表示されます。
通常私は次のようなものを書かなければならないでしょう
#ifdef DEBUG
std::cout << "Debug message" << std::endl;
#endif
これは、多くの場所で使用するのはかなり面倒で迷惑です。
コードスニペットのマクロを定義することは良い習慣なので、このように使用しますか?
MSG_DEBUG("Debug message")
または、マクロなしでそれに対処する他のよりエレガントな方法はありますか?異なるプロジェクトで両方の言語を使用しているため、CとC++の両方で可能な解決策に興味があります。
もちろん、そもそもマクロの使用に問題がなければ、同じ条件コードを繰り返し続けるのではなく、パラメーター化されたマクロを定義することは、適切なコーディングの手段としては確かに望ましいことです。
マクロを使用する必要がありますか?私の見解では、それはCで認められている慣行であり、マクロなしのソリューションでは少なくともsomethingがデバッグモード以外でも実行される必要があるためです。一般的なCプログラマーは、不必要な実行時の作業よりも少し醜いマクロをいつでも選択します。
ここには個人的な好みの要素がありますが、C++ではヘッダーファイルでこれを行うことを好みます。
#ifdef _DEBUG
void DebugMessage(...);
#else
inline void DebugMessage(...) {}
#endif
そのため、関数はリリースビルドでインライン化されますが、デバッグビルドでは適切な関数であるため、適切な型チェック、実用的なエラーメッセージなどを取得し、後でさらに機能を追加できます(おそらくログに記録しますか?)。
明らかに、対応する関数の定義を.cpp
ファイルの#ifdef _DEBUG
ブロックに含める必要もあります。
間違いなく、チームから与えられたコードのガイドラインを踏まないようにしてください。システム内の他のコードが一般的なif条件を介して同じ機能に到達しようとしないことを確認してください。