在 C 中记录程序的标准方法是什么?
What is the standard way to log a program in C?
具有 --verbose 或 --debug 选项的 C 程序,它们是如何实现的?不使用第三方库。
我的目标是不要一直这样做:
if(debug) printf("Debug msg\n");
printf("Info msg\n");
我见过的最常见的是打印到 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__
的任意格式字符串。
您可以参考下面的程序,其中定义了宏并基于传递给可执行文件的选项启用了日志记录。
#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
具有 --verbose 或 --debug 选项的 C 程序,它们是如何实现的?不使用第三方库。
我的目标是不要一直这样做:
if(debug) printf("Debug msg\n");
printf("Info msg\n");
我见过的最常见的是打印到 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__
的任意格式字符串。
您可以参考下面的程序,其中定义了宏并基于传递给可执行文件的选项启用了日志记录。
#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