→ DEATHX:所以你的正確結果是你瞎ㄇㄥ中的. 10/20 02:19
推 kroutony:感謝測試 10/20 02:27
推 tabinoyume:好像也不是完全這樣 10/20 02:31
→ tabinoyume:你把 c = b; 改成 c = 99; 10/20 02:31
→ tabinoyume:回傳值不會是99 10/20 02:32
→ james732:題外話:perl 就是把最後一個 statement 結果當回傳值 XD 10/20 02:33
→ DEATHX:在原本那篇有人以組語的觀點解釋,我想是比較合理的,最終這 10/20 02:34
→ DEATHX:本來就不是C應有的寫法,我們試圖去預測他的動作原理可能會 10/20 02:34
→ DEATHX:造成難以規範的動作出現. 10/20 02:35
→ Dannvix:驚!不是這樣吧... 只是因為EAX裡的殘值被當成回傳值而已 10/20 09:13
→ Dannvix:不同編譯器出來結果不同,是因為不同編譯器對register的 10/20 09:14
→ Dannvix:操作不相同,會有這種結果只是運氣好EAX剛好在運算過程中 10/20 09:14
→ Dannvix:被編譯器拿去用來暫存計算值 10/20 09:14
→ akasan:這種東西別測了 最佳化開下去f1就剩return... 10/20 09:49
推 ericinttu:樓上太直接了 XD 10/20 10:10
→ tinlans:這東西跟 calling convention 有關,x86 就剛好是 EAX。 10/20 10:34
→ tinlans:呼叫端才不管你有沒有實際傳回什麼,按照約定,它就是根據 10/20 10:35
→ tinlans:data type 去 register 裡,或把 register 的值當 pointer 10/20 10:35
→ tinlans:去 memory 取值。被呼叫端沒放,那是它違約 XD 10/20 10:36
→ tinlans:說起來這個東西還是個年經文,以前也有人問過,也有人做了 10/20 10:37
→ tinlans:跟你一樣的實驗,做出了和你一樣的結論。 10/20 10:38
→ tinlans:「它會自己幫你挑出一個回傳」<-- 實際上根本沒挑。 10/20 10:38
→ tinlans:而是一切隨緣。 10/20 10:39
推 purpose:同意t大。補充一下,return 是 double 的話,值是存在st0 10/20 10:45
→ james732:不過C編譯器不會抓到樣的錯誤呀? 10/20 11:00
→ Dannvix:@james732: gcc -Wall 的話會有警告訊息 10/20 11:22
推 CrBoy:小弟幾個星期前剛好讀到C語言的spec...裡面有特別提到這件事 10/20 23:00
→ CrBoy:它說 如果function沒有return 那是undefined behavior... 10/20 23:00
→ podd233f:看了好久...x86的組語實在是很沒感覺..orz 10/21 00:30