得到错误的答案——关于不确定的变量个数
Get the wrong answer——about uncertain number of variables
当我在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("%d\n", sum(3,2,3,4));
return 0;
}
我在GDB中调试,如下图:
enter image description here
我的系统配置如下。
Linux version 5.11.0-41-generic (buildd@lgw01-amd64-005) (gcc (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0, GNU ld (GNU Binutils for Ubuntu) 2.34)
您需要使用 header <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( "%lld\n", sum( 9, 1, 2, 3, 4, 5, 6, 7, 8, 9 ) );
}
程序输出为
45
当我在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("%d\n", sum(3,2,3,4));
return 0;
}
我在GDB中调试,如下图: enter image description here
我的系统配置如下。
Linux version 5.11.0-41-generic (buildd@lgw01-amd64-005) (gcc (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0, GNU ld (GNU Binutils for Ubuntu) 2.34)
您需要使用 header <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( "%lld\n", sum( 9, 1, 2, 3, 4, 5, 6, 7, 8, 9 ) );
}
程序输出为
45