【发布时间】:2017-01-10 13:04:45
【问题描述】:
我有一个这样的宏:
#define C( a... ) ( char *[] ){ a, 0 }
这适用于非空参数:
C( "a", "b" ) => ( char *[] )( "a", "b", 0 }
但我想在提供空参数时删除尾随逗号:
C() => ( char *[] ){ , 0 }
这可能吗?
【问题讨论】:
-
目前没有可移植的方式来做到这一点。 (不过,我相信有一个待定提案可以让你构建这样的东西。)
-
我的意思是,看看 Boost.Preprocessor,也许有 某种 类的魔法可以实现这一点。 (这也应该在 C 中工作。)
-
嗯,没关系,我只是好奇这是否可能。既然不是,我就定义类似
#define C0 ( char *[] ){ 0 } -
不要删除尾随逗号,而是首先不要添加它。请参阅我的策略:How to easily create fully “variadic” functions with C++ 98 standard?。
标签: c gcc c-preprocessor