自作テキストエディタを作成しているときに、標準出力にログを出しているのですが、リリースビルドしてもログが出て実際の処理時間がわからず、いちいちログ出力コードをコメントアウトしています。まぁめんどいですよね。
確かビルドに応じてコンパイルするコードを変更する方法あったはずです。ただ、よく分かっていないため調べてみました。
やり方
シンボル _DEBUG または NDEBUG を定義してプログラムをコンパイルします。このシンボルは Visual Studioの場合、プロジェクト作成時に自動的に定義されています。_DEBUG を定義すると、#ifdef _DEBUG ~ #endif または #ifdef NDEBUG ~ #endifで囲まれたコードがビルドに応じでコンパイルされます。
確かにプリプロセッサに_DEBUG が定義されていました。基本的にVisual Studioなら何も意識する必要は無いってことね。
サンプルコード
Visual Studio だと選択しているビルドに応じて対象外のコードはグレーアウトされます。
#include <iostream>
int main() {
// デバッグビルドの場合、コンパイルされる
#ifdef _DEBUG
std::cout << "Debug Hello World!n";
#endif
// リリースビルドの場合、コンパイルされる
#ifdef NDEBUG
std::cout << "Release Hello World!n";
#endif
}
おわりに
これでいちいちリリースビルドの場合、ログ出力コードをコメントアウトする必要はなくなりました。仮にリリースビルドでログを出したい場合は、ログ出力処理を共通化して #ifdef _DEBUG に している箇所を #ifdef NDEBUG に変更すれば良いですね。
コメント