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(),满足了上面三个要求。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容