C语言 可变函数返回垃圾值



我正在测试c中的可变函数。下面应该返回所有参数的总和,但它一直打印垃圾值。

#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("%dn", result);
return 0;
}

我以为它会返回所有参数的和

可变函数需要某种方式知道您传递给该函数的值。因此,您应该额外地将此数字作为函数的第一个参数传递:

#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( "%dn", result );
return 0;
}

程序输出如下:

35

您说您有y个可选参数,但实际上您只有3个,而不是6个。

int result = add(5, 3, 7, 8, 9);

PS:另外,您没有使用第一个参数x,因此您可以删除它。

相关内容

  • 没有找到相关文章

最新更新