C中具有--verbose或--debug选项的程序,它们实际如何实现它?不使用第三方库。
我的目标不是一直这样做:
if(debug) printf("Debug msg\n");
printf("Info msg\n");
答案 0 :(得分:5)
我见过的最常见的是打印到stderr
。
#ifdef DEBUG
#define DEBUG_MESSAGE(fmt, ...) fprintf(stderr, fmt ## "\n", __VA_ARGS__)
#else
#define DEBUG_MESSAGE(fmt, ...)
#endif
...别处
DEBUG_MESSAGE("VERBOSE: %s", "This is a verbose message.");
修改强>
在运行时可以运行的东西:
#define DEBUG_MESSAGE(fmt, ...)\
do{\
if(g_debugEnabled) fprintf(stderr, fmt ## "\n", __VA_ARGS__);\
}while(0)
可以类似地使用。
最后编辑
更改为使用__VA_ARGS__
的任意格式字符串。
答案 1 :(得分:1)
您可以参考以下程序,其中定义了宏,并且基于传递给可执行日志记录的选项已启用。
#include <stdio.h>
#include <string.h>
#define STREQ(a, b) !(strcmp((a), (b)))
#define logmsg(fmt, ...) \
do { \
if (debug) \
printf(fmt, ##__VA_ARGS__);\
}while(0)
char debug;
int main(int argc, char *argv[])
{
if (argc > 1) {
if ( STREQ(argv[1], "debug"))
debug = 1;
}
logmsg("%s\n", "hello_world");
return 0;
}
通过debug as the first argument to the executable to enable logging
注意:此程序已经过测试on Linux with gcc compiler