int func(int, ... ) { .... } int main() { func(1, 2, 3); func(1, 2, 3, 4); }
va_list
type 的變數,以列出傳進函式的參數。
va_start
巨集初始化 va_list
變數。
va_arg
巨集的 va_list
變數存取傳進函式的每一個參數值。
va_end
巨集清除 va_list
變數。
[dywang@dyw219 zzz]$ vim function5.c [dywang@dyw219 zzz]$ cat function5.c #include <stdio.h> #include <stdarg.h> float average(int num,...) { va_list valist; float sum = 0.0; int i; va_start(valist, num); for (i = 0; i < num; i++) { sum += va_arg(valist, int); } va_end(valist); return sum/num; } main() { printf("average(2,3,4)=%5.2f\n", average(2,3,4)); printf("average(3,3,4,5)=%5.2f\n", average(3,3,4,5)); printf("average(4,3,4,12,9)=%5.2f\n", average(4,3,4,12,9)); printf("average(5,3,4,65,11,39)=%5.2f\n", average(5,3,4,65,11,39)); }
[dywang@dyw219 zzz]$ gcc -o function5 function5.c
[dywang@dyw219 zzz]$ ./function5 average(2,3,4)= 3.50 average(3,3,4,5)= 4.00 average(4,3,4,12,9)= 7.00 average(5,3,4,65,11,39)=24.40