c语言中的可变长参数的函数小例子:
#include <stdio.h>
#include <stdarg.h>
#include <assert.h>
static int pp;
void func1()
{
static int pp1;
printf("hello world\n");
}
void tiny_printf(char *format, ...)
{
int i;
va_list ap;
va_start(ap, format);
for (i = 0; format[i] != ‘\0‘; ++i)
{
switch (format[i])
{
case ‘s‘:
printf("%s ", va_arg(ap, char*));
break;
case ‘d‘:
printf("%d ", va_arg(ap, int));
break;
default:
assert(0);
}
}
va_end(ap);
putchar(‘\n‘);
}
int main(void)
{
char *str = "abc";
tiny_printf("sdd", "hello", 3, 5);
return 0;
}
在第14行,声明va_list类型的变量ap。va_list类型是这样定义的:
typedef char *va_list;
在第15行,va_start(ap, format);意味着”使指针ap指向参数format的下一个位置”。
va_arg()制定ap和参数类型,就可以书序地取出可变长部分的参数。
第30行的va_end()只是一个摆设。
原文地址:http://blog.csdn.net/woniu317/article/details/45579749