在 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