c++的宏替换时,为什么使用##能把逗号去掉?

2021-05-14 18:08:03 +08:00
 yazoox

如下 #define debug3(format, ...) printf(format, ##VA_ARGS)

debug3("hello \n");

如果不添加##,当可变参数为 0 个时,编译会报错。

##的作用不是“连接前后两个字符串”么? 还是说,c++编译器就是这个处理的?

1820 次点击
所在节点    C++
3 条回复
heiheidewo
2021-05-14 18:23:38 +08:00
就是这么处理的
codehz
2021-05-14 18:26:43 +08:00
这里是编译器扩展,按标准的写法得写
__VA_OPT__(,) __VA_ARGS__ 但是这需要 c++20
codehz
2021-05-14 18:27:35 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/776992

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX