关于可变参数函数的学习

可变参数函数,顾名思义就是函数的参数个数是不确定的,可以变化的。
可变参数函数见得比较多的就是字符串格式化输入输出函数了,
如标准输入函数scanf、标准输出函数printf等。
#include <stdio.h>

int scanf(const char *format, ...);
int printf(const char *format, ...);

可以实现可变参数函数的原因是头文件stdarg.h中定义了几个宏,包括:
va_list/va_start/va_arg/va_end/va_copy

关于stdarg.h头文件,一开始在系统常规路径/usr/include以及/usr/lib/下面竟然都没有查到。
所以使用find命令来帮忙查找:
sh-# find /usr/include/ -name "stdarg.h"
sh-# find /usr/lib/ -name "stdarg.h"

这几个宏的定义方法如下:
typedef char* va_list;

va_start用来获取第二个参数的地址,即可变参数列表中第一个参数的地址,
#define va_start(ap, v) (ap = (va_list)&v ++ _INTSIZEOF(v));

va_arg用来获取可变参数列表中的当前参数,
#define va_arg(ap, t) (*(t*)((ap += _INTSIZEOF(t)) - _INTSIZEOF(t)))

va_end用来清空va_list的可变参数列表
#define va_end(ap) (ap = (va_list)0)

关于可变参数函数,除了这些字符串输入输出相关的库函数外,使用的场合并不多。
这里就先做个了解吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值