我有一个多文件C程序.我希望用户能够在运行时指定不同的调试级别.
实现这个的最佳方法是什么?
我正在考虑将调试(级别,"消息")类型函数导出并在任何地方使用.还有更好的/其他想法吗?
qrd*_*rdl 11
Jonathan的建议很好但是从C99开始我们就有了可变参数宏,所以不需要对调试宏使用双括号.
我使用的是日志标头的简易版本:
#define LOG_FATAL (1)
#define LOG_ERR (2)
#define LOG_WARN (3)
#define LOG_INFO (4)
#define LOG_DBG (5)
#define LOG(level, ...) do { \
if (level <= debug_level) { \
fprintf(dbgstream,"%s:%d:", __FILE__, __LINE__); \
fprintf(dbgstream, __VA_ARGS__); \
fprintf(dbgstream, "\n"); \
fflush(dbgstream); \
} \
} while (0)
extern FILE *dbgstream;
extern int debug_level;
Run Code Online (Sandbox Code Playgroud)
所以,无论我需要记录什么,我只需添加一行
LOG(LOG_ERR, "I/O error %s occured while opening file %s", strerror(errno), filename);
在程序初始化期间,您需要指定dbgstream(通常默认为stderr)和的值debug_level.
对于真正的项目而不是fprintf多次调用我只是从LOG宏调用我的函数并传递__FILE__,__LINE__并且__VA_ARGS_作为参数 - 该函数还在日志行中打印日期,时间和pid,并且不是fflush()每次都执行 - 仅当缓冲计数器超过预设值时 - 显着提高测井性能.
但请注意,某些编译器可能不支持可变参数宏,因为它仅在C99中引入.
| 归档时间: |
|
| 查看次数: |
6783 次 |
| 最近记录: |