Я скомпилировал приведенный ниже код в 32-битном и 64-битном. проблем нет в 32-битном, но я получаю ошибку компилятора в 64-битном режиме. , пожалуйста, помогите мне в устранении ошибки без использования клеветнической функции, такой как va_arg.Ошибка 64-битного компилятора в переменной va_list
#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.
[[email protected] ~]$ 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â)
[[email protected] ~]$
"... без использования клеветнической функции"? Что такое «клеветническая функция» и почему «va_arg» внезапно «оклеветали»? И как это более «клеветнировано», чем «va_start» и «va_end», которые вы уже используете? И где вы даже поняли, что вы можете применять арифметические операции к объекту 'va_list'? – AnT