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變量指明了變量個數。