2010-07-07 120 views
3

如果調用(非void)函數,但不將其返回值賦給變量,該怎麼辦? 例如,getchar();函數返回未分配給變量

我一直想知道這樣的價值會發生什麼。我聽到過幽默的解釋,比如「它走向了太陽」等等,但我真的很想知道。有沒有辦法恢復這樣的價值? 謝謝

+0

在什麼語言? – SLaks 2010-07-07 20:09:15

回答

4

不,你不會。

該值從堆棧彈出並消失。

如果您需要返回值,則應將其分配給一個變量。

+0

大多數調用約定都使用寄存器來返回值。所以沒有任何東西出現在堆棧中。 – 2010-07-07 20:10:26

0

簡單地'返回'(無論是通過自己隱式地調用return還是根本不返回)並且不分配值就是這樣做的,不會分配值,因此是null

3

這的確是編譯器/ CPU具體,但在大多數情況下返回值將在CPU寄存器(如果它適合),並且如果該寄存器不被後面的代碼所感動,你可以使用例如檢索「內聯彙編器」。

要回答你的問題更好,沒有「發生」的值。它位於堆棧位置或寄存器內。如果你使用它,好吧......如果沒有,真的沒有任何反應。最終,堆棧或寄存器被新值覆蓋...