下面演示了如何写类似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 " );
}