gpt4 book ai didi

c - 使用可变参数使用 va_arg 进行类型转换时出错

转载 作者:太空狗 更新时间:2023-10-29 16:12:26 25 4
gpt4 key购买 nike

我编写了这个简单的代码来使用可变参数求数字的平均值 -

#include <stdio.h>
#include <stdarg.h>

double avg(int num, ...)
{
va_list arg_list;
double sum=0;
int x;

va_start(arg_list,num);

for(x=0;x<num;x++)
{
double n=va_arg(arg_list,double);
printf("Num = %f\n",n);
sum+=n;
}
va_end(arg_list);
return sum/num;
}

int main(int argc,char *argv[])
{
printf("%f\n",avg(2,2.0,4.0));
return 0;
}

每个输入的数字都转换为 double 。但是,如果我在传递给 main() 中的 avg() 的参数中输入 4 而不是 4.0,编译器似乎无法正确地进行类型转换。谁能指出这背后的机制?

最佳答案

当然,编译器在编译 avg() 时并不知道您将如何在调用 va_arg() 时挑选参数打电话。

类型必须匹配,因为例如 intdouble 通常具有不同的大小。根据编译器用于传递参数的确切机制,如果您输入一个大小的值并取出另一个大小的值,这可能会导致不匹配。不好,不要那样做。

使此操作更安全的一种方法是使用 printf() 样式的规范字符串,因为许多编译器会检查这些字符串以使参数匹配。

关于c - 使用可变参数使用 va_arg 进行类型转换时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23889932/

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