下面演示了如何写类似printf的函数
#include <stdio.h>
#include <stdarg.h> //要包含这个头文件
void variable(int i, ...)
{
int j = 0;
va_list arg_ptr; //第1步,定义这个指向参数列表的变量
va_start(arg_ptr, i);//第2步,把上面这个变量初始化.即让它指向参数列表
while( j != -1 )
{
//第3步,获取arg_ptr指向的当前参数.这个参数的类型由va_arg的第2个参数指定
j = va_arg(arg_ptr, int);
printf("%d ",j );
}
va_end(arg_ptr); //第4步,做一些清理工作
}
main()
{
variable(3, 3, 4, 5, 6, -1);
}
#include <stdarg.h> //要包含这个头文件
void variable(int i, ...)
{
int j = 0;
va_list arg_ptr; //第1步,定义这个指向参数列表的变量
va_start(arg_ptr, i);//第2步,把上面这个变量初始化.即让它指向参数列表
while( j != -1 )
{
//第3步,获取arg_ptr指向的当前参数.这个参数的类型由va_arg的第2个参数指定
j = va_arg(arg_ptr, int);
printf("%d ",j );
}
va_end(arg_ptr); //第4步,做一些清理工作
}
main()
{
variable(3, 3, 4, 5, 6, -1);
}
作为va_list,va_start的练习,可以学习一下使用_vsnprintf函数
#include <stdio.h>
#include <stdarg.h>
void formatoutput(char* format, ...)
{
char s[10];
va_list arg_ptr;
va_start(arg_ptr, format);
_vsnprintf(s, sizeof(s)-1, format, arg_ptr);
printf("%s ", s);
}
void main()
{
formatoutput("%s%s", "d", "g");
}
#include <stdarg.h>
void formatoutput(char* format, ...)
{
char s[10];
va_list arg_ptr;
va_start(arg_ptr, format);
_vsnprintf(s, sizeof(s)-1, format, arg_ptr);
printf("%s ", s);
}
void main()
{
formatoutput("%s%s", "d", "g");
}