您的位置:首页 > 其它

va_list va_start va_arg va_end 这几个函数的使用

2017-01-18 22:42 357 查看
乍一看这几个函数好像很高级啊。

我来简单的记录一下。

首先说说它们的使用环境,就是当函数的参数个数是可变的时候才会用。

比如:

int function_test(int val, …);

这样的函数接口,它的参数个数是可变的,这就导致在实现这个函数内容时该如何获取调用者传给它的参数。

1.先定义一个指向可变参数的指针:

va_list ptr_va;

2.初始化一下这个指针,然后使用这个指针去获取参数;

va_start(ptr_va, val);

使用va_start()来初始化ptr_va,第个val的含义是function_test()的参数中的最后一个固定的参数,也就是…之前的参数,我后来推测了一下,它这么要求是不是想知道在栈中从哪里开始是可变参数啊,先定位一下。随着调完va_start(),ptr_va这个指针就已经指向了可变参数的第1个参数了,下面就该是获取这个参数了。

3.va_arg(ptr_va,int);

va_arg()的第2个参数表示将要获取的那个参数的类型,这样va_arg()就直接返回了想要的那个参数,把它的返回值赋给一个同类型的变量就行了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: