c/c++:帶有返回類型的函數沒有return語句會怎么樣
背景
機器有時候啟動的時候發現異常,跟蹤了代碼發現,有人在寫一個int
函數的時候,有一個分支沒有return
;
參考:https://www.cnblogs.com/mobius2018/p/9844060.html
結論
C++編譯器不允許這種做法,會報編譯錯誤
C編譯器如GCC一般不會報錯,但返回的值不確定:
原理:函數聲明時的返回類型指明,函數出棧后要去寄存器中取值(取出來的是return值的地址),函數中沒有return,只是沒有給這個寄存器存入合法的值。
出棧后還是會去讀寄存器,只是讀出來的是垃圾數據。