我已经在32位和64位编译了下面的代码。 在32位没有问题,但我在64位模式下遇到编译器错误。 请帮助我删除错误,而不使用像va_arg这样的诽谤功能。
#include<stdarg.h>
#include<stdio.h>
int sum(int, ...);
int main(void)
{
printf("Sum of 10, 20 and 30 = %d\n", sum(8, 10, 20, 30, 40, 50, 60, 70, 80) );
printf("Sum of 4, 20, 25 and 30 = %d\n", sum(4, 4, 20, 25, 30) );
return 0;
}
int sum(int num_args, ...)
{
int val = 0;
va_list ap;
int i;
va_start(ap, num_args);
for(i = 0; i < num_args; i++)
{
val += *(int *)((ap += sizeof(int)) - sizeof(int));
}
va_end(ap);
return val;
}
error is below.
[avinta@la-lnx61dev01 ~]$ gcc -m64 var_list1.c
var_list1.c: In function âsumâ:
var_list1.c:28: error: invalid operands to binary + (have âva_listâ and âlong unsigned intâ)
[avinta@la-lnx61dev01 ~]$
答案 0 :(得分:0)
你在做什么是不便携的。使用va_arg
是标准允许的唯一方式。您依赖于在一个体系结构上实现va_list
的详细信息,这与在不同体系结构上的实现方式不同。