目次

- [可変長引数 条件付きデバッグ関数](#variadic)

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

リリース版には残したくないデバッグ用のコードは、 以下のように #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 に、 リリース時には // コメントに置き換えられます。

更新履歴

ブログ