C言語入門(23)デバッグ用コードをリリース版では無効化可能な#ifdef

Posted: 2013年01月17日

#ifdefを使用するとコンパイル時にコンパイル対象化指定することが可能です。
それは、タイトルにも書いていますが
デバッグ用に書いたコードは実際に動作してほしくないため、
#ifdefを用いてその処理をコンパイルコードから除外します。
具体的にはどのように記述するか

 #ifdef DEBUG
     printf(_T("デバッグ用メッセージ"));
 #endif

このコードでは、DEBUGのdefineが定義されている場合printfを実行します。

その他にも様々な指定が行えます。

コード 意味 使用例
#if 「#if 式」でコンパイル対象の条件を記述できます。&br;#if define(define名)で #ifdefと同様 #if WINVER==0x0501&br;#endif
#ifdef 「#ifdef define名」でコンパイル対象の条件を記述できます。 #ifdef UNICODE&br;#endif
#ifndef 「#ifdef define名」でコンパイル対象の条件を記述できます。&br;#ifdefのnot版(定義されていないとき) #ifndef UNICODE&br;#endif
#else #ifで当てはまらない場合を記述できます #if WINVER==0x0501&br;#else&br;#endif
#elif #ifで当てはまらない場合で「#elif 式」コンパイル対象の条件を記述できます #if WINVER==0x0501&br;#elif WINVER==0x0701&br;#endif
#endif #ifの終端 #if WINVER==0x0501&br;#endif
#define 定数の定義 #define DEBUG
#undef 定数の定義解除 #undef DEBUG

他にも
#シリーズは存在していますが次回という事で
#includeも#シリーズという事でちょっとジャンルが違うため

実際に使用されている身近な箇所

TCHARは身近であり
#ifdefが用いられているいい例かもしれません。
Vitual Studioの場合 プロジェクト設定をUnicodeにすると#define UNICODEが定義されます。
そのためTCHARは以下のように定義されています。

 #ifdef UNICODE
  #define TCHAR wchar_t
 #else
  #define TCHAR char
 #endif

ヘッダーファイルの多重インクルード抑止にも使用されます。

 #ifndef MY_HEADER_H
  #define MY_HEADER_H
  // ヘッダーの定義
 #endif

ヘッダーファイルの多重インクルード抑止が一般的かもしれません

 #pragma once

練習練習:

  1. デバッグコードは、#ifndefを用いて不要な場合コンパイル対象にならないようにしてみてください
カテゴリー: プログラム, 入門 | タグ: , | コメント無し »

コメント