【C++/Win32】ビルドに応じて実行するコードを変更する方法

この記事は約2分で読めます。

自作テキストエディタを作成しているときに、標準出力にログを出しているのですが、リリースビルドしてもログが出て実際の処理時間がわからず、いちいちログ出力コードをコメントアウトしています。まぁめんどいですよね。

確かビルドに応じてコンパイルするコードを変更する方法あったはずです。ただ、よく分かっていないため調べてみました。

やり方

シンボル _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 に変更すれば良いですね。

コメント

タイトルとURLをコピーしました