【发布时间】:2021-12-26 07:04:01
【问题描述】:
当我在 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 版本 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)
【问题讨论】:
-
关于:
res += *p++;这会有优先级问题。建议:res += (*p)++; -
关于:
int* p = &num + 1;取决于我们是向上还是向下构建堆栈,这不会访问任何参数
标签: c variadic-functions function-definition