私は非常に基本的なクラスを持っており、それをBasicと名付け、より大きなプロジェクトの他のほとんどすべてのファイルで使用されています。場合によっては、デバッグ出力が必要ですが、リリースモードでは、これを有効にせず、NOOPにする必要があります。
現在、ヘッダーには、設定に応じてマクロのオンとオフを切り替える定義があります。したがって、スイッチをオフにすると、これは間違いなくNOOPになります。次のコードがある場合、コンパイラー(MSVS / gcc)が関数呼び出しを最適化できるので、これもNOOPになるのではないかと思います。(そうすることで、スイッチは.cppにある可能性があり、スイッチングははるかに高速になり、コンパイル/リンクの時間的になります)。
--Header--
void printDebug(const Basic* p);
class Basic {
Basic() {
simpleSetupCode;
// this should be a NOOP in release,
// but constructor could be inlined
printDebug(this);
}
};
--Source--
// PRINT_DEBUG defined somewhere else or here
#if PRINT_DEBUG
void printDebug(const Basic* p) {
// Lengthy debug print
}
#else
void printDebug(const Basic* p) {}
#endif