当我在Linux系统中运行下面的程序时,我无法得到预期的答案"9〃;。但我可以在windows系统中找到它。
为什么会发生这种情况?
#include <stdio.h>
int sum(int num, ...){
int* p = &num + 1;
int res = 0;
while(num--){
res += *p++;
}
return res;
}
int main(){
printf("%dn", sum(3,2,3,4));
return 0;
}
我在GDB中调试它,如下所示:在此处输入图像描述
我的系统配置如下。
Linux版本5.11.0-41-generic(buildd@lgw01-amd64-005)(gcc(Ubuntu 9.3.0-17ubuntu1~20.04(9.3.0,GNU ld(适用于Ubuntu的GNU Binutils(2.34(
您需要使用标头<stdarg.h>
中定义的宏。
给你。
#include <stdio.h>
#include <stdarg.h>
long long int sum( size_t n, ... )
{
long long int result = 0;
va_list ap;
va_start( ap, n );
while (n--)
{
result += va_arg( ap, int );
}
va_end( ap );
return result;
}
int main( void )
{
printf( "%lldn", sum( 9, 1, 2, 3, 4, 5, 6, 7, 8, 9 ) );
}
程序输出为
45