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