首页 > 解决方案 > 我如何自定义 fprintf 以启用禁用

问题描述

我想自定义fprintf启用/禁用日志记录的功能

我的项目使用 Makefile。

#define ENABLE_LOG 
void log(fmt, ...){
  #ifdef ENABLE_LOG
    va_list vargs;
    va_start(vargs, fmt);
    fprintf(stderr, vargs);
    va_end(vargs);
  #endif
}

log("Test"); # build error
log("TEST %d", 1); # build error

我如何创建log可以启用/禁用的自定义功能ENABLE_LOG

标签: c++debugging

解决方案


你需要使用vfprintf(). 另外,我会创建一个空宏来避免调用空函数。

#define ENABLE_LOG 
#ifdef ENABLE_LOG
void log(const char *fmt, ...) {
    va_list vargs;
    va_start(vargs, fmt);
    vfprintf(stderr, fmt, vargs);
    va_end(vargs);
}
#else
#define log(fmt, ...)
#endif

另外,请注意,已经有一个名为log. 您可能会考虑使用不同的名称(特别是如果您使用可怕的名称using namespace std;- 即使您的代码看起来像纯 C。)


推荐阅读