日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁 > 單片機(jī) > CPP開發(fā)者
[導(dǎo)讀]經(jīng)常在知乎上可以看到這個問題,于是嘗試著回答了一下,沒想到國內(nèi)C巨佬吳詠煒老師還給我點(diǎn)了個贊,讓我相當(dāng)激動,下面具體介紹下!結(jié)論可能大家看上面的圖就知道了,沒有加return0;編譯器會自動添加一個。那怎么證明呢?可以查看相應(yīng)的匯編代碼,查看匯編代碼推薦使用godbolt.org...


經(jīng)常在知乎上可以看到這個問題,于是嘗試著回答了一下,沒想到國內(nèi)C 巨佬吳詠煒老師還給我點(diǎn)了個贊,讓我相當(dāng)激動,下面具體介紹下!

結(jié)論可能大家看上面的圖就知道了,沒有加return 0;編譯器會自動添加一個。那怎么證明呢?


可以查看相應(yīng)的匯編代碼,查看匯編代碼推薦使用godbolt.org網(wǎng)站,相當(dāng)方便。



如上圖,輸入C 代碼,在右半部分會顯示編譯器編譯后的匯編代碼,通過查看高級語言背后的匯編指令我們可以更好的分析代碼的性能。網(wǎng)站更強(qiáng)大的功能是它支持市面上幾乎所有的編譯器,而且各個版本都有。


下面使用這個網(wǎng)站分析一波!


先看一段帶有return 0的截圖:



看我右面紅框圈出來的代碼,大家可以理解為eax就是main()函數(shù)的返回值,這里可以看到main()函數(shù)的返回值是0。


再看一段不帶return 0的相應(yīng)截圖:


可以發(fā)現(xiàn)編譯器還是把eax的值設(shè)為了0,由此可以理解為,即使在main函數(shù)中不寫return 0,編譯器還是會默認(rèn)添加個return 0。


那其他非main函數(shù)也會默認(rèn)添加個return 0嗎?


先看一個普通的帶有int返回值的函數(shù):


注意看func()中的eax寄存器被賦值為9,即func()的返回值為9。


如果不加return a是什么樣子?



可以看到,如果在func()內(nèi)不寫return語句,編譯器則沒有給eax寄存器更新值,那函數(shù)的返回值就不會是我們期待的樣子。


得出結(jié)論:正常一個帶有返回值的函數(shù),返回值都會存在某個地方,可能是棧上也可能是寄存器里,如果你不給它返回值,那可能外部獲取的返回值就是個奇奇怪怪的值,因為咱也不知道那塊地址是什么數(shù)據(jù)。


但是吧,main函數(shù)除外,因為main函數(shù)沒有return的話,編譯器會默認(rèn)加個return 0;但個人認(rèn)為這也確實是不好的習(xí)慣,mian函數(shù)會犯這種錯誤,其它函數(shù)估計也會這樣,所以最好所有的帶有返回值的函數(shù)都添加return xxx。

打完收工。


- EOF -

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除( 郵箱:macysun@21ic.com )。
換一批
延伸閱讀
關(guān)閉