c++ - 我如何自定义 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
解决方案
你需要使用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。)
推荐阅读
- c++ - 结构的搜索向量
- android - 如何反转蒙版?
- node.js - ReferenceError 在 node.js 中使用 mongoose 将数据保存到 mongodb
- python - 在python中连接可能存在或不存在的字典键
- javascript - 为什么我不能使用 let、const 或 var 关键字在 ES6 类中声明变量,但我可以直接声明它?
- java - 使用 android studio firebase 添加实时数据库
- javascript - 密码存储在谷歌浏览器的浏览器内存中
- php - chmod 在 Dockerfile RUN 命令中无法正常工作。在构建过程中显示正确,但似乎没有坚持
- python - Python检查字符串列表中的句子中是否存在字符串
- php - 如何使用 php 将 elasticsearch 集成到 mysql