头文件引用
为了使用可变参数列表,你需要添加标准库中的 “stdarg.h”
头文件中定义的一个类型和三个宏
va_list
typedef char *va_list;
va : variable argument
va_start
#define va_start(AP, LASTARG) (AP = ((char *) &(LASTARG) + __va_rounded_size (LASTARG))));
功能:使ap指向函数中可变参数的首地址:
__va_rounded_size 是内存对齐宏详见:C语言内存对齐详解3
va_arg
#define va_arg(AP, TYPE) \
(AP += __va_rounded_size (TYPE), \
*((TYPE *) (AP - __va_rounded_size (TYPE))))
功能:1.返回可变参数的当前参数;2.将指针指向下一个参数;所有可变参数类型都设定为TYPE
注:函数无法判断检索到的参数是否是可变参数列的最后一个参数
va_end
#define va_end(ap) ( ap = (va_list)0 )
注:va_end常与va_start成对使用
使用示例:
#include <stdio.h>
#include <stdarg.h>
void var_test(char *format, ...)
{
va_list list;
va_start(list,format);
char *p;
while( (p=va_arg(list, char *)) != NULL )
printf("%s ",p);
va_end(list);
}
int main()
{
var_test("","this","is","a","test",NULL);
return 0;
}
参考文献:C语言中可变参数函数实现原理