在C++中禁用宏中的逗号
Disable comma in macros in C++
本文关键字:C++ 更新时间:2023-10-16
我有以下日志的 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__ })
请注意,我在宏扩展中删除了参数周围的括号。
通常添加它们是个好主意,但你必须记住,它们不是一个神奇的咒语。它们包含在宏扩展的结果中,在这种情况下,它们会阻止代码编译。
相关文章:
- 没有找到相关文章