1. 函数原型定义
变长参数是C语言的特殊参数形式, 例如如下函数声明:
int printf(const char* format, ...);
void myFunc(int arg1, float arg2, int arg, ...);
2. 变长参数的使用
在变长参数函数的实现部分,可以使用stdarg.h头文件里面的多个宏来访问各个额外的参数,假设lastarg是变长参数函数的最后一个具名参数(例如printf里的format,myFunc里的arg)。
(1)首先定义类型为va_list的变量,如:
va_list ap;
该变量以后将会依次指向各个额外的变量参数。
(2)其次ap必须用宏va_start初始化
va_start(ap); //初始化指针
此时ap指向额外参数的第一个参数。
(3)使用宏va_arg取得当前ap指向的参数的值,并使ap指向下一个参数
int next = va_arg(ap); //假设此时的参数类型为int型
va_end(ap); //指针清零
例子,如下代码:
/* VariableArgs.c */
#include <stdio.h>
#include <stdarg.h>
void func(unsigned count, ...);
int main(void)
{
func(3, 1, 2, 3);
return 0;
}
void func(unsigned count, ...)
{
int next, i;
va_list ap;
va_start(ap, count);
for (i = 0;i < count;i++)
{
printf("%d: ap = %p, *ap = %d, ",i, ap, *ap);
next = va_arg(ap, int);
printf("next = %d\n", next);
}
printf("end: ap = %p\n", ap);
va_end(ap);
}
输出: