[英]Variadic function returns garbage value
我在 C 中测试可变参数函数。下面应该返回所有 arguments 的总和,但它一直打印垃圾值。
#include <stdio.h>
#include <stdarg.h>
int add(int x, int y, ...)
{
va_list add_list;
va_start(add_list, y);
int sum = 0;
for (int i = 0; i < y; i++)
sum += va_arg(add_list, int);
va_end(add_list);
return sum;
}
int main()
{
int result = add(5, 6, 7, 8, 9);
printf("%d\n", result);
return 0;
}
我以为它会返回所有 arguments 的总和
可变参数 function 需要某种方式来了解您已将多少个值传递给 function。因此,您还应将此数字作为第一个参数传递给 function:
#include <stdio.h>
#include <stdarg.h>
int add( int num_values, ... )
{
va_list add_list;
va_start( add_list, num_values );
int sum = 0;
for ( int i = 0; i < num_values; i++ )
sum += va_arg( add_list, int );
va_end(add_list);
return sum;
}
int main( void )
{
int result = add( 5, 5, 6, 7, 8, 9 );
printf( "%d\n", result );
return 0;
}
该程序具有以下 output:
35
你说你有y
个可选的 arguments,但实际上你只有 3 个,而不是 6 个。
int result = add(5, 3, 7, 8, 9);
应该管用。
PS:此外,您不使用第一个参数x
,因此可以将其删除。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.