【发布时间】:2019-11-07 04:07:17
【问题描述】:
我正在研究 C 编程语言,我发现非常有趣的一件事是可变参数函数的实现。我目前正在尝试打印传递给函数的每个值,但我只得到了一部分参数。
我尝试运行一些我在网上找到的示例,以获取参数的平均数以及求和算法(如下所示)。
#include <stdio.h>
#include <stdarg.h>
int sum(int count, ...)
{
va_list args;
va_start(args, count);
int total = 0;
for (int i = 0; i < count; i++) {
int num = va_arg(args, int);
total += num;
printf("Value #%d: %d\n", i, num);
}
va_end(args);
return total;
}
int main()
{
int result = sum(1, 2, 3, 4, 5);
printf("The result is: %d\n", result);
}
上面的代码只打印:
Value #0: 2
The result is: 2
我认为这是因为for 循环使用第一个参数作为索引的最大值。但是……
我的问题是printf 如果不需要传递要替换的格式化字符串中的参数数量,它是如何工作的?
是不是因为在幕后,C 运行时计算在格式化字符串中声明了多少格式说明符?这是我的猜测。
提前致谢。
【问题讨论】:
标签: c variadic-functions