在 c 程式裡要使用不定參數的作法如下:
1. 要含入 STDIO.H 和 STDARG.H :
#include
#include
2. 不定參數的部份, 使用 ... 來宣告, 宣告法為:
回傳型態 函式名(固定參數, ...);
例: float SumFloat(int number, ...);
例: void Show(const char *header, int sn, const char *fmt, ...);
3. 在函式內宣告一個 va_list 變數做為參數指標.
例: va_list marker;
4. 使用 va_start 巨集來設定參數指標 va_list, 用來知道要取得的不定參數從那開始:
va_start(va_list 變數, 不定變數前的最後一個固定參數);
例: va_start(marker, number);
例: va_start(marker, fmt);
5. 使用 va_arg 巨集來取得參數值, 每次呼叫都會將 va_list 移向下一個參數:
參數值 = va_arg(va_list 變數, 參數值型態);
※注意:參數值型態若為 float 會有問題 (傳入值被當成 double 大小處理), 須以 double 取代?
例: int i = va_arg(marker, int);
例: double f = va_arg(marker, double);
6. 由於是不定參數, 因此編譯器並不曉得如何檢查參數,
因此必須有方法辨視要取得的參數有幾個,
例如:在固定參數裡傳入不定參數個數.
7. 使用 va_end 巨集來將參數指標 va_list 重設為 NULL:
va_end(va_list 變數);
例:va_end(marker);
以下為範例:
#include
#include
double Sumdouble(int number, ...) {
va_list marker;
double sum = 0;
double f;
int i;
va_start(marker, number);
while (number > 0) {
sum += va_arg(marker, double);
number--;
}
va_end(marker);
return sum;
}
void main(void) {
printf("Sum is: %f\n", Sumdouble(2, 1.1f, 2.2f));
printf("Sum is: %f\n", Sumdouble(3, 1.1f, 2.2f, 3.3f));
}
全站熱搜
留言列表