提问者:小点点

在C++中禁用宏中的逗号


我有以下日志的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"})

我怎样才能解决有逗号的问题?


共1个答案

匿名用户

使用变量宏:

#define JLOG_INFO(...) LOG_INFO(LogJson{ { "level" : "info"}, __VA_ARGS__ })

注意,我删除了宏展开中参数周围的括号。

通常添加它们是一个好主意,但是你必须记住它们不是一个神奇的咒语。 它们包含在宏扩展的结果中,在这种情况下,它们将阻止代码的编译。

相关问题


MySQL Query : SELECT * FROM v9_ask_question WHERE 1=1 AND question regexp '(c++|中|禁用|宏|中|逗号)' ORDER BY qid DESC LIMIT 20
MySQL Error : Got error 'repetition-operator operand invalid' from regexp
MySQL Errno : 1139
Message : Got error 'repetition-operator operand invalid' from regexp
Need Help?