C——变参宏与变参函数

实现工具头文件:stdarg.h

  1. 变参宏:__VA_ARGS___

把宏参数列表中最后的参数写省略号(…)实现接受数量可变的参数;__VA_ARGS__则用在替换部分中,表明省略号代表什么,如

#define PR(…) printf(__VA_ARGS__) ○ 注意省略号只能代替最后的宏参数,如

#define WRONG(X,…,Y)是错误的。

  1. 变参函数

实现步骤(需要手动实现)

i. 提供一个使用省略号的函数原型
(1) 至少有一个形参,省略号必须在最后

ii. 在函数定义中创建一个va_list类型的变量
iii. 用宏把该变量初始化为一个参数列表
(1) 宏:va_start(va_list, parmN)
(2) parmN是可变参数的个数,一般通过函数固定形参传递

iv. 用宏访问参数列表
(1) 宏:va_arg(va_list, 类型名 )
(2) 类型名指定了返回值的类型
(3)第一次调用返回参数列表的第1项,第二次调用返回参数的第2项,以此类推)

v. 用宏完成清理工作
(1) va_end(va_list)
(2) 调用之后,va_list变量只有用va_start重新初始化后才能使用
(3) 所以如果需要退回之前参数,需要保留va_list变量的副本,可以使用va_copy(va_list,va_list)宏来处理。把第2个参数拷贝给第1个参数。

例子:

double sum(int lim, ...)
{
    va_list ap; // 声明一个对象储存参数
    double tot = 0;
    int i;
    va_start(ap, lim); // 把ap初始化为参数列表
    for (i = 0; i < lim; i++)
        tot += va_arg(ap, double); // 访问参数列表中的每一项
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值