++C++; // 未確認飛行 C

C言語小ネタ集

目次

キーワード

可変長引数 条件付きデバッグ関数

リリース版には残したくないデバッグ用のコードは、 以下のように #if, #ifdef プリプロセッサ命令を使って条件コンパイルするのが一般的です。

#ifdef _DEBUG_
#define debug_puts(str) fputs(str, fp);
#else
#define debug_puts()
#endif

また、最近のコンパイラは不要なコードは綺麗さっぱり消してくれるので、 以下のようにフラグと inline 関数を使って条件コンパイルを行うことも出来ます。

#ifdef _DEBUG_
#define DEBUG_PUTS_ON 1
#else
#define DEBUG_PUTS_ON 0
#endif

inline void debug_puts(char* str)
{
  if(DEBUG_PUTS_ON)
    fputs(str, fp);
}

しかし、これらの方法では可変長引数を取れない(inline 関数を使う方は出来ないこともないけど、やっぱりめんどくさい)という欠点があります。 そこで、Visual C++ 限定の手法なんですが、 可変長引数を使いたい場合には以下のようにします。

#ifdef _DEBUG_
#define debug_printf printf
#else
#define SLASH() /
#define debug_printf SLASH()SLASH()
#endif

こうすることで、debug_printf はデバッグ時には printf に、 リリース時には // コメントに置き換えられます。

Transtation into English

[お問い合わせ](q)