我有以下日志的json格式化程序代码:
#define JLOG_INFO(value) LOG_INFO(LogJson{ { "level" : "info"}, (value) })
当我尝试使用它时:
JLOG_INFO({"message", "Hello world"}, {"module", "base"});
由于逗号,我有以下错误:
error: macro "JLOG_INFO" passed 4 arguments, but takes just 1 JLOG_INFO({"message", "Hello world"}, {"module", "base"})
我怎样才能解决有逗号的问题?
使用变量宏:
#define JLOG_INFO(...) LOG_INFO(LogJson{ { "level" : "info"}, __VA_ARGS__ })
注意,我删除了宏展开中参数周围的括号。
通常添加它们是一个好主意,但是你必须记住它们不是一个神奇的咒语。 它们包含在宏扩展的结果中,在这种情况下,它们将阻止代码的编译。