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变量指明了变量个数。