[問題] 參數傳遞個數的問題..
開發平台(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
最後覺得會錯誤的程式碼居然可以編譯成功,但程式流程又很怪異
整個不太能理解它的行為..
--
你的行動或許沒有意義,但你還是非做不可。
這不是為了改變世界,而是為了讓你成為不會被世界改變的那個人.
– 甘地(Mahatma Gandhi)
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.167.63.16
※ 文章網址: http://www.ptt.cc/bbs/C_and_CPP/M.1419457149.A.15D.html
→
12/25 08:57, , 1F
12/25 08:57, 1F
→
12/25 08:57, , 2F
12/25 08:57, 2F
→
12/25 09:04, , 3F
12/25 09:04, 3F
→
12/25 09:04, , 4F
12/25 09:04, 4F
→
12/25 09:05, , 5F
12/25 09:05, 5F
→
12/25 09:05, , 6F
12/25 09:05, 6F
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章