C 語言透過 <stdarg.h> 提供一組巨集,讓函式能接受不定數量的參數。核心類型與巨集如下:
va_list ap:宣告一個參數列表指標;va_start(ap, last_fixed_arg):使 ap 指向第一個可變參數(last_fixed_arg 為最後一個固定參數);va_arg(ap, type):取得目前參數值並將 ap 推進到下一個參數;va_end(ap):清理 ap,結束可變參數處理。#include <stdarg.h>
#include <stdio.h>
int sum(int num_args, ...) {
int val = 0;
va_list ap;
va_start(ap, num_args);
for (int i = 0; i < num_args; i++) {
val += va_arg(ap, int);
}
va_end(ap);
return val;
}
int main(void) {
printf("Sum of 10, 20 and 30 = %d\n", sum(3, 10, 20, 30));
printf("Sum of 4, 20, 25 and 30 = %d\n", sum(4, 4, 20, 25, 30));
return 0;
}
Sum of 10, 20 and 30 = 60 Sum of 4, 20, 25 and 30 = 79