#define DEBUG
#ifdef DEBUG
#define PRINT print
#else
#define PRINT(...) ((void)0) //strip out PRINT instructions from code
#endif
void print(const char *fmt, ...) {
va_list args;
va_start(args, fmt);
vsprintf(str, fmt, args);
va_end(args);
printf("%s\n", str);
}
int main() {
PRINT("[%s %d, %d] Hello World", "March", 26, 2009);
return 0;
}
コンパイラが可変長マクロを認識しない場合は、次のいずれかを使用して PRINT を削除することもできます。
#define PRINT //
また
#define PRINT if(0)print
1 つ目は PRINT 命令をコメントアウトし、2 つ目は NULL if 条件のために PRINT 命令を防止します。最適化が設定されている場合、コンパイラは次のような実行されたことのない命令を削除する必要があります。または ((void)0);