windows c/c++ debug/release 屏蔽log方法

如果我们想重定向输出到文件中,同时要求输出有多个参数。另外在debug模式下想要打印出一些log,但是release模式下不想打印出来,有一种通过宏屏蔽的方式,先上成功的方法。

#ifdef DEBUG
#define LOG_VERBOSE(fmt, ...) printf(fmt,##__VA_ARGS__);fflush(stdout);
#define LOG_DEBUG(fmt,...) printf(fmt,##__VA_ARGS__);fflush(stdout);
#define LOG_WARN(fmt,...) printf(fmt,##__VA_ARGS__);fflush(stdout);
#else
#define LOG_VERBOSE(...) 
#define LOG_DEBUG(...)
#define LOG_WARN(...) 
#endif 
#define LOG_ERROR(fmt,...) printf(fmt,##__VA_ARGS__);fflush(stdout);

文件重定向

FILE* logFile;
logFile = freopen("log.txt", "w", stdout);

//文件关闭
if (!logFile) {
    fclose(logFile);
} 

后面printf()的内容就会写入到log.txt中

分析

  1. 先解释一下 VA_ARGS
    我理解也不是很好,我理解是一个多参数的宏。
    https://blog.csdn.net/bat67/article/details/77542165

  2. 对stdout 和 printf 缓冲区的解释
    http://seanchense.github.io/2018/10/05/cache-policy-behind-printf-stdout/
    所以如果用 stdout重定向的话,缺点是不能输出多个参数。
    LOG_VERBOSE(" only one parameters !\n");
    用printf可以输出多个参数,但是变成全缓冲区,我们希望及时写入文件,所以增加了fflush(),满足了上面三个要求。

你可能感兴趣的:(windows c/c++ debug/release 屏蔽log方法)