gpt4 book ai didi

c - 不指定参数数量的可变参数函数

转载 作者:太空宇宙 更新时间:2023-11-04 06:45:17 24 4
gpt4 key购买 nike

我正在学习 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 运行时计算格式化字符串中声明了多少格式说明符?这是我的猜测。

提前致谢。

最佳答案

无法查明实际提供了多少个参数。

printf() 从格式字符串中计算出来。格式字符串中的每个 % 运算符都对应一个参数(这是一种简化),它会根据需要处理尽可能多的参数来填充每个参数。

所以如果你写:

printf("%d %s\n", intvar, stringvar);

它知道必须有 2 个附加参数:一个用于 %d,另一个用于 %s

一些函数使用的另一种方法是标记最后一个参数的值。

execl("program", "arg0", "arg1", "arg2", (char *)NULL);

execl() 处理参数,直到达到 NULL 值。

关于c - 不指定参数数量的可变参数函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58741851/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com