ret語句并不是像你想象的那樣作為一個(gè)跳轉(zhuǎn)語句的返回值使用的。

十載專注建站、設(shè)計(jì)、互聯(lián)網(wǎng)產(chǎn)品按需策劃服務(wù),業(yè)務(wù)涵蓋品牌網(wǎng)站制作、商城網(wǎng)站制作、微信小程序開發(fā)、軟件系統(tǒng)開發(fā)、成都app開發(fā)等。憑借多年豐富的經(jīng)驗(yàn),我們會(huì)仔細(xì)了解每個(gè)客戶的需求而做出多方面的分析、設(shè)計(jì)、整合,為客戶設(shè)計(jì)出具風(fēng)格及創(chuàng)意性的商業(yè)解決方案,創(chuàng)新互聯(lián)建站更提供一系列網(wǎng)站制作和網(wǎng)站推廣的服務(wù),以推動(dòng)各中小企業(yè)全面信息數(shù)字化,并利用創(chuàng)新技術(shù)幫助各行業(yè)提升企業(yè)形象和運(yùn)營(yíng)效率。
ret語句是和call語句配套出現(xiàn)的。就像c語言里面的兩個(gè)大括號(hào)一樣,有左邊的,就要相應(yīng)的有右邊的。
當(dāng)你調(diào)用call命令的時(shí)候,PC寄存器的內(nèi)容被壓棧,程序轉(zhuǎn)去執(zhí)行call指令指向的地址,也就是PC寄存器被賦于新值。
當(dāng)你調(diào)用ret命令的時(shí)候,堆棧棧頂元素被返回到PC里面,然后pc++,從剛才的斷點(diǎn)繼續(xù)執(zhí)行。
是return(z);你多了個(gè)字母,意思是返回z的值給函數(shù)max,然后主函數(shù)再調(diào)用max,即輸出其較大值。
scanf函數(shù)成功輸入的數(shù)值個(gè)數(shù) 我們可以通過判斷if(scanf("%d",man)==1)判斷是否輸入成功
事實(shí)上 無論是return ; 還是return X;
在匯編上都只有一條指令:ret(retn)
只不過對(duì)于return X; 會(huì)在 執(zhí)行ret指令之前對(duì)eax寄存器賦值:
如果是return 0 ; 可能編譯器會(huì)這樣做:
xor eax,eax
ret
其他情況類似
然后從C語言角度講
對(duì)于返回類型為void的函數(shù)
函數(shù)體內(nèi)可以出現(xiàn)return;語句來表示結(jié)束本函數(shù)的執(zhí)行
這個(gè)時(shí)候eax還是有值的,因?yàn)?函數(shù)返回類型是void,因此在調(diào)用該函數(shù)的地方不可能會(huì)去用該函數(shù)的返回值,也就意味著該返回值是毫無意義的
樓主想問的 單獨(dú)的return;語句,對(duì)于這行代碼,一般只用在返回類型為void的函數(shù)體內(nèi)
若出現(xiàn)在非void返回類型的函數(shù)體內(nèi),那么返回值是隱含在寄存器eax中的
然后對(duì)于有返回值的函數(shù)來說
return后面是肯定需要跟一個(gè)值的
這個(gè)值是被送入寄存器eax帶出來的~
我說再多 也許還是會(huì)有人不信(本人玩逆向的,這一切信不信那是你們的事,我只能把事實(shí)告訴你們,我也只能做到這樣了)
下面直接上代碼上圖:
(微軟任何C/C++編譯器、VC/VS這些、都支持編譯此代碼,沒有警告,沒有錯(cuò)誤)
注:主函數(shù)不主函數(shù)的return都是沒有區(qū)別的
但是main函數(shù)很特別,特別在它有好多種寫法,標(biāo)準(zhǔn)C真正的主函數(shù)返回類型是int
有2個(gè)參數(shù),一個(gè)是命令行參數(shù)個(gè)數(shù),一個(gè)是命令行參數(shù)
windows下面的主函數(shù)可以有三個(gè)參數(shù),前兩個(gè)參數(shù)跟標(biāo)準(zhǔn)C一樣,第三個(gè)參數(shù)是環(huán)境變量
這些參數(shù)都是由mainCRTStartup函數(shù)傳進(jìn)來的,而mainCRTStartup再往上你還要研究的話那。。。。那。。。那。。。我只能告訴你這些參數(shù)都是要操作系統(tǒng)傳進(jìn)來的吧~~~
我們編程的時(shí)候,也許有些菜鳥會(huì)把main寫成如下形式:void main()
其實(shí)這種寫法在編譯之后都是會(huì)被轉(zhuǎn)化成標(biāo)準(zhǔn)寫法的底樓說的 不帶返回值系統(tǒng)默認(rèn)返回0這完全是不靠譜的,因?yàn)槭聦?shí)當(dāng)中返回值都是被寄存器eax帶出去的,而對(duì)于main是必須要返回值的,菜鳥寫了沒返回值的main在編譯之前就被編譯器替換掉了,哪來的默認(rèn)返回0的說法?何來默認(rèn)?系統(tǒng)會(huì)把你寫的main換成 標(biāo)準(zhǔn)main形式!標(biāo)準(zhǔn)main會(huì)在底下返回0
主函數(shù)return的值只有你在其他進(jìn)程中創(chuàng)建子進(jìn)程,子進(jìn)程的返回狀態(tài)被父進(jìn)程接收的值就是main的返回值,所以,在你寫的程序不需要被其他進(jìn)程創(chuàng)建的話,main的返回值是無關(guān)緊要的
分享題目:C語言ret什么函數(shù),c語言re是什么意思
當(dāng)前鏈接:http://chinadenli.net/article39/dseiosh.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供響應(yīng)式網(wǎng)站、域名注冊(cè)、搜索引擎優(yōu)化、網(wǎng)站建設(shè)、網(wǎng)站導(dǎo)航、網(wǎng)站排名
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)