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

时间:2015-03-17 12:25:00

标签: c c99

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

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

if(debug) printf("Debug msg\n");
printf("Info msg\n"); 

2 个答案:

答案 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