man stdarg
#include <stdarg.h>
/* 允许访问可变参数,last 是函数的第一个参数,用于确定参数在栈中的地址 */
void va_start(va_list ap, last);
/* 访问下一个可变参数 */
type va_arg(va_list ap, type);
/* 结束可变参数的遍历 */
void va_end(va_list ap);
示例
#include <stdio.h>
#include <stdarg.h>
int sum(int count, ...) {
int total = 0;
va_list args;
va_start(args, count);
for (int i = 0; i < count; i++) {
int tmp = va_arg(args, int);
printf("#%d: %d\n", i, tmp);
total += tmp;
}
va_end(args);
return total;
}
int main() {
printf("1 + 2 + 3 = %d\n", sum(3, 1, 2, 3));
return 0;
}
输出:
#0: 1
#1: 2
#2: 3
1 + 2 + 3 = 6