真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

c語言函數(shù)忘記寫返回值 c++函數(shù)沒有返回值

請問C語言中一個(gè)函數(shù)沒有return它返回什么?

首先是猜想,主流平臺(tái)上,函數(shù)返回都是通過某個(gè)通用寄存器返回,x86平臺(tái)是eax,arm是r0,所以猜想即使是void返回,如果硬是要得到返回值的話,應(yīng)該是得到返回那一刻該寄存器的值。

創(chuàng)新互聯(lián)公司成都企業(yè)網(wǎng)站建設(shè)服務(wù),提供成都做網(wǎng)站、成都網(wǎng)站建設(shè)網(wǎng)站開發(fā),網(wǎng)站定制,建網(wǎng)站,網(wǎng)站搭建,網(wǎng)站設(shè)計(jì),自適應(yīng)網(wǎng)站建設(shè),網(wǎng)頁設(shè)計(jì)師打造企業(yè)風(fēng)格網(wǎng)站,提供周到的售前咨詢和貼心的售后服務(wù)。歡迎咨詢做網(wǎng)站需要多少錢:13518219792

證實(shí):為了證實(shí),需要寫一點(diǎn)代碼,一個(gè)最簡單的void test(){},一個(gè)main(){printf("%d", test())},然而這樣并不行,無法通過編譯,需要使用手段,代碼如下

void?test()

{

return;

}

typedef?int(*F)(void);

int?main()

{

F?f?=?(F)test;

printf("%d\n",?f());

return?0;

}

對,就是把函數(shù)強(qiáng)制轉(zhuǎn)換為返回int再調(diào)用,結(jié)果并不出人意料,是-858993460,這個(gè)數(shù)看起來沒什么意義,不過轉(zhuǎn)成16進(jìn)制就有意義了,它是0xcccccccc,在VS的debug過程中,eax總是被初始化成這個(gè)值,堆棧內(nèi)數(shù)組也是如此,同時(shí)它也是著名的"屯屯屯屯"的來源。

再把test改一下,進(jìn)一步驗(yàn)證,試圖讓它返回0,辦法是把eax變成0:

void?test(){

int?i?=?1;

i--;

return;

}

猜想這次會(huì)輸出0,因?yàn)閕會(huì)放進(jìn)eax里,再進(jìn)行自減運(yùn)算,結(jié)果也得到證實(shí)。

機(jī)器環(huán)境,win10 64bit,IDE,visual studio 2015 社區(qū)版。

希望有所幫助。

C語言中自定義的函數(shù)沒有返回值會(huì)怎樣?

這是錯(cuò)誤,既然函數(shù)定義要返回值,就返回一個(gè)值,不返回結(jié)果是未知的 c語言可以允許這樣的代碼,c++視為錯(cuò)誤

這是vc2017結(jié)果:

deubg模式結(jié)果是4,release結(jié)果是0, 所以這個(gè)代碼沒有意義

debug模式 結(jié)果是4

release模式 結(jié)果是0

C語言二級(jí)考試int函數(shù)沒寫return,會(huì)算錯(cuò)嗎?

也可以這樣:#includevoidmain()//void標(biāo)識(shí)無返回值{inta,b,sum;a=1,b=2;sum=a+b;printf("sumis%d\n",sum);}

如果C語言中調(diào)用函數(shù)前面沒有定義它的返回值類型

這種屬于函數(shù)返回值的隱式聲明。 隱式聲明的函數(shù)返回值類型都是int 當(dāng)然了,這個(gè)只需要了解一下就好了。不建議這么寫。 現(xiàn)在很多編譯器都不允許這樣的聲明出現(xiàn)。如果C語言中調(diào)用函數(shù)前面沒有定義它的返回值類型


分享文章:c語言函數(shù)忘記寫返回值 c++函數(shù)沒有返回值
新聞來源:http://weahome.cn/article/hhcphs.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部