在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__ })

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

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

相关文章:
  • 没有找到相关文章