使用可变参数宏进行C日志记录

时间:2018-11-02 01:07:31

标签: c macros variadic-macros

我正在尝试用C语言编写一个无开销的日志记录宏。

我的第一个想法是:

#define debug_print(...) \
  { \
    printf(_LOG_FMT, _LOG_ARGS); \
    printf(__VA_ARGS__); \
    printf("\n"); \
  }

但这有一个问题,我必须打三遍printf(开销)。

我的第二个想法是:

#define _LOGFUNCTION(LEVEL, message, ...) \
    printf(_LOG_FMT message "\n", _LOG_ARGS, __VA_ARGS__)

但是现在我无法将其传递给简单的字符串进行记录。它将抱怨VA_ARGS中的零参数。

有没有办法解决这两个问题?

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

从上面的评论中找到答案!

#define BAR_HELPER(fmt, ...) printf(fmt "\n%s", __VA_ARGS__)
#define BAR(...) BAR_HELPER(__VA_ARGS__, "")

https://stackoverflow.com/a/8673872/5531233

再次感谢一些程序员伙计!