yazoox
V2EX  ›  C++

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

By yazoox at 2021 年 5 月 14 日 · 2654 次点击

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

debug3("hello \n");

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

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

3 条回复  •  2021-05-14 18:27:35 +08:00
heiheidewo
   1
heiheidewo  
   2021 年 5 月 14 日
就是这么处理的
codehz
   2
codehz  
   2021 年 5 月 14 日 via Android
这里是编译器扩展,按标准的写法得写
__VA_OPT__(,) __VA_ARGS__ 但是这需要 c++20
codehz
   3
codehz  
   2021 年 5 月 14 日 via Android
© 2026 V2EX · 32ms · 3.9.8.5