0
아래의 코드를 32 비트 및 64 비트로 컴파일했습니다. 32 비트에서는 문제가 없지만 64 비트 모드에서는 컴파일러 오류가 발생합니다. va_arg와 같은 중상 기능을 사용하지 않고 오류를 제거하는 데 도움을주십시오. 뭐변수 va_list에 대한 64 비트 컴파일러 오류
#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