面试题答案
一键面试#include <stdio.h>
#include <stdarg.h>
#define SUM(...) sum(__VA_ARGS__)
int sum(int first, ...) {
va_list args;
va_start(args, first);
int total = first;
int num;
while ((num = va_arg(args, int)) != 0) {
total += num;
}
va_end(args);
return total;
}
你可以这样使用:
int main() {
int result = SUM(1, 2, 3);
printf("SUM(1, 2, 3) 的结果是: %d\n", result);
return 0;
}
在上述代码中:
SUM(...)
是一个宏定义,它展开为sum(__VA_ARGS__)
,__VA_ARGS__
是预定义宏,表示可变参数列表。sum
函数接受可变参数,通过va_start
初始化可变参数列表,va_arg
逐个获取参数,va_end
结束可变参数的处理。这里假设用0作为参数结束的标志。- 在
main
函数中调用SUM
宏来计算多个整数的和,并输出结果。