示例
/* va_start example */
#include <stdio.h>
#include <stdarg.h>
void PrintFloats ( int amount, ...)
{
int i;
double val;
printf ("Floats passed: ");
va_list vl;
va_start(vl,amount);
for (i=0;i<amount;i++)
{
val=va_arg(vl,double);
printf ("\t%.2f",val);
}
va_end(vl);
printf ("\n");
}
int main ()
{
PrintFloats (3,3.14159,2.71828,1.41421);
return 0;
}
/* va_arg example */
#include <stdio.h>
#include <stdarg.h>
int FindMax ( int amount, ...)
{
int i,val,greater;
va_list vl;
va_start(vl,amount);
greater=va_arg(vl,int);
for (i=1;i<amount;i++)
{
val=va_arg(vl,int);
greater=(greater>val)?greater:val;
}
va_end(vl);
return greater;
}
int main ()
{
int m;
m= FindMax (7,702,422,631,834,892,104,772);
printf ("The greatest one is: %d\n",m);
return 0;
}
FindMax函数使用它的第一个参数保存将会获取到的额外参数的数量。第一个额外的参数被获取并且作为初始
的比较值,然后在一个循环里获取余下的参数并且返回其中最大的一个(在这里就是892)。
va_end
void va_end( va_list ap );
执行合适的动作,使得我们可以从使用了va_list类型对象ap获取额外参数的函数中正常返回。
无论va_start在之前的什么时候被执行,这个宏必须在函数返回之前执行。
参数
ap
va_list对象,也就是之前通过va_start初始化的对象。
返回值
无
示例
/* va_arg example */
#include <stdio.h>
#include <stdarg.h>
void PrintLines ( char* first, ...)
{
char* str;
va_list vl;
str=first;
va_start(vl,first);
do {
printf ("%s\n",str);
str=va_arg(vl,char*);
} while (str!=NULL);
va_end(vl);
}
int main ()
{
PrintLines ("First","Second","Third","Fourth",NULL);
return 0;
}