1. 程式人生 > >C語言函數的可變參數列表

C語言函數的可變參數列表

函數 values 第一個 stdarg.h 變量 include 例如 urn 命名

  可變參數列表可通過宏來實現,這些宏定義在stdarg.h頭文件中,它是標準庫的一部分。這個頭文件聲明了一個類型va_list和三個宏----va_start,va_arg,va_end.可以聲明一個類型為va_list的變量,與這幾個宏配合使用,訪問參數的值。參數列表的可變部分位於一個或多個普通參數(命名參數)的後面(即參數列表中至少要有一個命名參數),它在函數原型中以一個省略號表示。

例如:定義一個函數average可以計算若幹個整數的平均值:

 1 #include <stdarg.h>
 2 float average(int n_value,...)
 3 {
 4     va_list var_arg;
5 int count; 6 float sum=0; 7 8 va_start(var_arg,n_value); 9 10 for(count =0;count<n_value;count++) 11 { 12 sum+=va_arg(var_arg,int); 13 } 14 15 va_end(var_arg); 16 return sum/n_values; 17 }

說明:函數聲明一個名叫va_arg的變量,它用來訪問參數列表的未確定部分。這個變量通過調用va_start來初始化。它的第一個參數是va_list 類型變量的名字,第二個參數是省略號前最後一個有名字的參數。初始化過程把變量var_arg設置為指向可變參數部分的第一個參數。為了訪問參數,需要使用va_arg,這個宏接受兩個參數:va_list類型變量和參數列表中下一個參數的類型。在這個例子中,所有的可變參數都是整型。va_arg返回這個參數的值,並使var_arg指向下一個可變參數。最後,當訪問完畢最後一個可變參數之後,需要調用va_end。

C語言函數的可變參數列表