楼主:
HowLeeHi (处处留心皆正妹)
2014-12-25 05:39:04开发平台(Platform): (Ex: VC++, GCC, Linux, ...)
GCC
问题(Question):
最近在复习C语言时看到了一个习题上的问题
程式码如下
int foo();
int bar();
int main(void)
{
foo(2, 3, 4);
return 0;
}
int foo(int a, int b)
{
return bar(a);
}
int bar(int c, int d)
{
int e = c + d;
return e;
}
我用gcc居然可以编译成功没有错误讯息也没有warning...
foo原型宣告里面没有宣告参数,后面有宣告2个
然后呼叫bar函数居然也没有错误
我转成组合语言看了一下后,第一次call foo 虽然有把3个参数搬到暂存器去
但是foo函数里面只有接收到前2个参数,也就是2跟3
然后在call bar时,只有传2这一个参数过去
但是在bar里面计算c+d时,居然又用到了2跟 另一个暂存器(值为3)
也就是在 bar里面 变量e是5
最后觉得会错误的程式码居然可以编译成功,但程式流程又很怪异
整个不太能理解它的行为..