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@deyu zzz]$ vim function5.c
[dywang@deyu 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@deyu zzz]$ gcc -o function5 function5.c
[dywang@deyu 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