繁体   English   中英

在 C++ 的宏中禁用逗号

[英]Disable comma in macros in 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"})

如何解决逗号问题?

使用可变参数宏:

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM