__VA_ARGS__的作用和用法

重点:

1.注意__VA_ARGS__ 和宏定义的...(参数列表)配套使用

__VA_ARGS__ 是C/C++中的一个宏,用于在宏定义中表示可变数量的参数(variadic arguments)。它通常与宏函数(函数式宏)一起使用,以便可以在宏中处理不定数量的参数。

在宏定义中,__VA_ARGS__ 表示所有传递给宏的参数,可以是零个或多个参数。下面是一个使用 __VA_ARGS__ 的简单示例:

#include <iostream>

#define LOG(...) std::cout << __VA_ARGS__ << std::endl

int main() {
    LOG("Hello, World!"); // 输出:Hello, World!
    LOG("The answer is", 42); // 输出:The answer is 42

    return 0;
}

在上面的示例中,LOG 是一个宏,它使用 __VA_ARGS__ 来接受可变数量的参数,并将它们打印到标准输出流。

注意以下几点:

  1. __VA_ARGS__ 必须位于宏定义的参数列表中的最后。
  2. __VA_ARGS__ 前后可以有其他参数,但至少要有一个参数,以便在没有传递额外参数时编译不会出错。
  3. 使用逗号 , 分隔参数。在示例中,LOG("The answer is", 42) 中的逗号会被认为是两个不同的参数。

__VA_ARGS__ 是一个强大的特性,它允许你创建具有可变数量参数的宏,以实现各种不同的功能,如条件性地打印日志、生成代码等。但要小心使用,确保不会导致宏展开时的意外行为。

2.计算__VA_ARGS__个数的方法

ARG_N_HELPER计算可输入参数个数最高为20个

#define ARG_T(t)  t  //解决VC编译错误
#define ARG_N(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18,a19,a20,N,...)  N //截取并返回第四个参数,这里限制了可变参数计算的范围[1,4]
#define ARG_N_HELPER(...)  ARG_T(ARG_N(__VA_ARGS__))   //辅助宏
#define COUNT_ARG(...)  ARG_N_HELPER(__VA_ARGS__,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0)  //返回可变参数个数

int main() {
	int numArgs = COUNT_ARG(1, 2, 3, 4, 5,1,1,1,1,1,1,1,1,1,1,1,1,1);
	std::cout << "Number of arguments: " << numArgs << std::endl;
	return 0;
}

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值