C语言可变参数

    C语言的函数可以有可变数量的参数,这可以用宏来实现,这个宏定义在stdarg.h中。需要用的宏有va_start,va_arg,va_end,还需要用到类型va_list.使用va_list定义一个变量,这个变量用来存放可变参数的列表,va_start从这个列表中读取变量,va_arg用于返回当前的参数值,并且指向下一个可变参数,在可变参数处理完成后,还要调用va_end()。

可变参数的实现简单实例:

# include <stdio.h>
# include <stdarg.h>
# include <stdlib.h>
int main()
{

void f(int count,...);
f(5,1,2,3,4,5);
f(3,1,2,3);
system("pause");
return 0;
}

void f(int count,...)
{
va_list arg;   //参数列表
int i=0;
va_start(arg,count);
for(i=0;i<count;i++)
	printf("%d\n",va_arg(arg,int));
va_end(arg);   //可变参数处理完成
}

     使用可变参数需要注意的地方是,va_arg只能正确识别两种类型的参数,即int 和double,如果想va_arg传入了char,short int 类型,会自动提升为int ,传入float类型,会自动提升为double,此时程序可能会发生不可预料的错误。另外,使用可变参数还要通过命名参数指定参数的个数,比如printf函数使用第一个参数,即格式化字符串,指明了参数的类型和个数,上面的例程中用count变量指明了变量个数。


你可能感兴趣的:(c,printf,可变参数,stdarg)