如果調用(非void)函數,但不將其返回值賦給變量,該怎麼辦? 例如,getchar();函數返回未分配給變量
我一直想知道這樣的價值會發生什麼。我聽到過幽默的解釋,比如「它走向了太陽」等等,但我真的很想知道。有沒有辦法恢復這樣的價值? 謝謝
如果調用(非void)函數,但不將其返回值賦給變量,該怎麼辦? 例如,getchar();函數返回未分配給變量
我一直想知道這樣的價值會發生什麼。我聽到過幽默的解釋,比如「它走向了太陽」等等,但我真的很想知道。有沒有辦法恢復這樣的價值? 謝謝
不,你不會。
該值從堆棧彈出並消失。
如果您需要返回值,則應將其分配給一個變量。
大多數調用約定都使用寄存器來返回值。所以沒有任何東西出現在堆棧中。 – 2010-07-07 20:10:26
簡單地'返回'(無論是通過自己隱式地調用return還是根本不返回)並且不分配值就是這樣做的,不會分配值,因此是null
。
這的確是編譯器/ CPU具體,但在大多數情況下返回值將在CPU寄存器(如果它適合),並且如果該寄存器不被後面的代碼所感動,你可以使用例如檢索「內聯彙編器」。
要回答你的問題更好,沒有「發生」的值。它位於堆棧位置或寄存器內。如果你使用它,好吧......如果沒有,真的沒有任何反應。最終,堆棧或寄存器被新值覆蓋...
如果您想了解更多關於它是如何工作,你可以看看這個:http://en.wikipedia.org/wiki/Call_stack
在什麼語言? – SLaks 2010-07-07 20:09:15