在C中记录程序的标准方法是什么?

ana*_*ius 0 c c99

C语言中有-verbose或--debug选项的程序,它们实际上是如何实现的?不使用第三方库.

我的目标不是一直这样做:

if(debug) printf("Debug msg\n");
printf("Info msg\n"); 
Run Code Online (Sandbox Code Playgroud)

def*_*ube 5

我见过的最常见的是打印到stderr.

#ifdef DEBUG
#define DEBUG_MESSAGE(fmt, ...) fprintf(stderr, fmt ## "\n", __VA_ARGS__)
#else
#define DEBUG_MESSAGE(fmt, ...)
#endif
Run Code Online (Sandbox Code Playgroud)

别处...

DEBUG_MESSAGE("VERBOSE: %s", "This is a verbose message.");
Run Code Online (Sandbox Code Playgroud)

编辑

在运行时可以运行的东西:

#define DEBUG_MESSAGE(fmt, ...)\
do{\
    if(g_debugEnabled) fprintf(stderr, fmt ## "\n", __VA_ARGS__);\
}while(0)
Run Code Online (Sandbox Code Playgroud)

哪个可以类似地使用.

最后的编辑

更改为使用任意格式字符串__VA_ARGS__.