10. stdarg.h
stdarg標頭檔定義了當函數參數個數位置時用於擷取參數的宏。
宏:
va_start();
va_arg();
va_end();
類型:
typedef va_list
10.1. 變數和定義
va_list適用於進入帶有stdarg宏的函數的參數的類型。
一個帶有不確定個數參數的函數,用(,...)在參數列表的末尾來標示。
10.2. va_start
聲明 :
void va_start(va_list ap, last_arg);
初始化與va_arg和va_end宏配合使用的ap。last_arg是傳給函數的最有一個可以確定的參數(省略符號前面的哪個參數)。注意va_start在使用va_arg和va_end前調用。
10.3. va_arg
聲明:
type va_arg(va_list ap, type);
在參數列表(即ap)後面跟隨另一個參數type的情形。注意ap必須被va_start初始化。如果沒有下個參數,則結果是未定義的。
10.4. va_end
聲明:
void va_end(va_list ap);
允許一個帶有參數的調用了宏va_start的函數返回。如果va_end在函數返回前沒有被調用,則結果是未定義的。參數列表ap在調用了va_end之後和沒有調用va_start之前不允許被使用。
執行個體:
#include<stdarg.h> #include<stdio.h> void sum(char *, int, ...); int main(void) { sum("The sum of 10+15+13 is %d.\n",3,10,15,13); return 0; } void sum(char *string, int num_args, ...) { int sum=0; va_list ap; int loop; va_start(ap,num_args); for(loop=0;loop<num_args;loop++) sum+=va_arg(ap,int); printf(string,sum); va_end(ap); }
英文原文:http://www.acm.uiuc.edu/webmonkeys/book/c_guide/2.10.html
原文作者:Eric Huss
中文譯者:柳驚鴻 Poechant
著作權聲明:本文的原文著作權歸Eric Huss所有,中文譯文著作權歸Poechant所有。轉載請註明來自"柳大的CSDN部落格":http://blog.csdn.net/poechant