一、已知函数中的例子。
- int palPrintf(const char* format, ...) /*…为可变参数,不限定个数和类型。(后面采用专门的指针指向他)*/
- {
- va_list ap; //初始化指向可变参数列表的指针
- char buf[MAXLINE]; //定义存放可变参数转化成格式化字符串的数组。
- int result; //定义变量,用于调用函数。
- va_start(ap, format); //将第一个可变参数的地址赋给ap,即ap指向可变参数列表的开始。
- result = vsnprintf(buf, MAXLINE, format, ap); //将参数ap和format进行转化形成格式化字符串,即可以显示的字符串。
- va_end(ap); //将参数ap复位。
- if (result >= 0)
- {
- printf(buf); //打印buf数组
- }
- return result; // 返回数据给函数调用
- }
二、va_start、va_list、va_end、va_arg的应用。
写一个简单的可变参数的例子
如何写一个简单的可变参数的C函数.写可变参数的 C函数要在程序中用到以下这些宏:
- #include <stdarg.h>
- void va_start(va_list ap, last);
- type va_arg(va_list ap, type);
- void va_end(va_list ap);
- void va_copy(va_list dest, va_list src);
va在这里是variable-argument(可变参数)的意思。这些宏定义在stdarg.h中,所以用到可变参数的程序应该包含这个 头文件。
下面我们写一个简单的可变参数的函数,该函数至少有一个整数参数,第二个参数也是整数,是可选的。函数作用只是打印这两个参数的值。
- void simple_va_fun(int i, ...)
- {
- va_list arg_ptr;
- int j=0;
- va_start(arg_ptr, i);
- j=va_arg(arg_ptr, int);
- va_end(arg_ptr);
- printf("%d %d\n", i, j);
- return;
- }
从这个函数的实现可以看到,我们使用可变参数应该有以下步骤:
- 首先在函数里定义一个va_list型的变量,这里是arg_ptr,这个变量是指向参数的指针.
- 然后用va_start宏初始化变量arg_ptr,这个宏的第二个参数是第一个可变参数的前一个参数,是一个固定的参数.
- 然后用va_arg返回可变的参数,并赋值给整数j. va_arg的第二个参数是你要返回的参数的类型,这里是int型.
- 最后用va_end宏结束可变参数的获取.然后你就可以在函数里使 用第二个参数了.如果函数有多个可变参数的,依次调用va_arg获取各个参数.
转载于:https://blog.51cto.com/lyidea/1160649