可变宏扩展

变量宏扩展是指与具有可变自变量数的宏相关的 C99 和标准 C++ 的两个扩展。 一个扩展是用于将变量参数标识从 __VA_ARGS__ 重命名为用户定义的标识的机制。 当未指定变量自变量时,另一个扩展提供了一种方法来除去变量宏中的悬空逗号。

以下示例演示了如何使用标识来代替 __VA_ARGS__。 宏 debug 的第一个定义说明了 __VA_ARGS__的通常用法。 第二个定义显示使用标识 args 代替 __VA_ARGS__
#define debug1(format, …)  printf(format, ## __VA_ARGS__)
#define debug2(format, args …)  printf(format, ## args)
调用 宏扩展的结果
debug1("Hello %s\n","World"); printf("Hello %s\n","World");
debug2("Hello %s\n","World"); printf("Hello %s\n","World");

如果函数宏的变量自变量被省略或为空,并且后跟 ## 的逗号在函数宏定义中的变量自变量标识之前,那么预处理器将除去尾部逗号。

C++0x 仅以 C++0x 开头。

在 C++0x中,将从 C99 预处理器中采用与空宏参数相关的可变宏功能和更改,以便为 C 和 C++ 编译器提供公共预处理器接口。 C++0x中支持可变宏和空宏参数。 有关更多信息,请参阅 C++11 中采用的 C99 预处理器功能部件 (C++11)

C++0x 仅限 C++0x 的结束。