Questions tagged «variadic-macros»

10
GCC的## __ VA_ARGS__技巧的标准替代方法?
C99中可变参数宏的空参数存在一个众所周知的 问题。 例: #define FOO(...) printf(__VA_ARGS__) #define BAR(fmt, ...) printf(fmt, __VA_ARGS__) FOO("this works fine"); BAR("this breaks!"); BAR()根据C99标准,上述的使用确实是不正确的,因为它将扩展为: printf("this breaks!",); 请注意结尾的逗号-不可行。 一些编译器(例如:Visual Studio 2010)将悄悄地为您消除尾随的逗号。其他编译器(例如:GCC)也支持放在##前面__VA_ARGS__,如下所示: #define BAR(fmt, ...) printf(fmt, ##__VA_ARGS__) 但是,是否存在符合标准的方法来实现此行为?也许使用多个宏? 现在,该##版本似乎受到了很好的支持(至少在我的平台上),但是我确实希望使用符合标准的解决方案。 先发制人:我知道我可以编写一个小函数。我正在尝试使用宏进行此操作。 编辑:这是为什么我想使用BAR()的示例(尽管很简单): #define BAR(fmt, ...) printf(fmt "\n", ##__VA_ARGS__) BAR("here is a log message"); BAR("here is a log message with a …

12
C ++预处理器__VA_ARGS__参数数量
我在网上找不到答案的简单问题。在可变参数宏中,如何找到参数个数?如果可以的话,我对Boost预处理器还可以。 如果有什么不同,我试图将可变数量的宏参数转换为增强预处理程序序列,列表或数组,以进行进一步的处理。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.