可变宏扩展
变量宏扩展是指与具有可变自变量数的宏相关的 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中,将从 C99 预处理器中采用与空宏参数相关的可变宏功能和更改,以便为 C 和 C++ 编译器提供公共预处理器接口。 C++0x中支持可变宏和空宏参数。 有关更多信息,请参阅 C++11 中采用的 C99 预处理器功能部件 (C++11)。
仅限 C++0x 的结束。