在无法识别##的编译器上吞并可变宏中的逗号

我需要在C中编写一个variadic宏,它必须带有零个或多个参数。

在gcc中,可以通过在逗号后添加“##”来实现,例如,##____VA_ARGS____在Variadic宏中以零参数的forms回答。

但是,我的构建系统中的编译器(超出我的控制范围)不理解,##语法,因此不会吞下逗号。

我可以使用一种解决方法吗?

谢谢!

是的,gcc吞下逗号是非标准的,你不应该依赖它。

使用符合C99的预处理器,您可以通过测试作为空令牌的宏参数来实现类似的效果。 关于这是如何工作的想法,你可以在这里看到,对于一整套预处理器宏来说,这些function的编程很容易,有P99 。