這真是一個挺好的問題,手機先佔坑。
返回的是 eax 暫存器裡的內容。
eax 暫存器有兩個作用:
想要看到高階語言的更底層實現,需要去看它的彙編結果,題主程式碼的彙編結果手機上不方便寫出來,整體邏輯是:函式 swap 內的 return 對應著將結果放到了eax 暫存器,主函式 main 中如果有 x = swap(a, b) 對應的彙編為:
更進一步:
一個更簡單的程式:
你可以想象 add 函式中會有一條彙編語句:
如果修改一下程式:
你猜會怎麼樣?程式編譯會給出一條警告,但是可以編譯成功,而且執行結果是正確的。
因為 eax 有兩個功能:
a + b 的時候結果已經存到 eax 中了, 單純的 return 並不會影響 eax,所以主函式中讀到的 a + b 時使用的功能1中的結果。
這真是一個挺好的問題,手機先佔坑。
返回的是 eax 暫存器裡的內容。
eax 暫存器有兩個作用:
計算時的臨時儲存變數 在函式返回時,作為傳遞返回值的暫存器想要看到高階語言的更底層實現,需要去看它的彙編結果,題主程式碼的彙編結果手機上不方便寫出來,整體邏輯是:函式 swap 內的 return 對應著將結果放到了eax 暫存器,主函式 main 中如果有 x = swap(a, b) 對應的彙編為:
更進一步:
一個更簡單的程式:
你可以想象 add 函式中會有一條彙編語句:
如果修改一下程式:
你猜會怎麼樣?程式編譯會給出一條警告,但是可以編譯成功,而且執行結果是正確的。
因為 eax 有兩個功能:
計算時的臨時儲存變數 在函式返回時,作為傳遞返回值的暫存器a + b 的時候結果已經存到 eax 中了, 單純的 return 並不會影響 eax,所以主函式中讀到的 a + b 時使用的功能1中的結果。