国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

C語言return陷阱小結

2019-11-08 02:37:41
字體:
來源:轉載
供稿:網友

  1 #include "stdio.h"

  2 

  3 int num =0;

  4 int value =7;

  5 

  6 int TestFunc(void)

  7 {

  8     if(num ==0)

  9     return

 10     value += 1;

 11     return5;

 12 }

 13 

 14 int main(void)

 15 {

 16     PRintf("%d/n",TestFunc());

 17     return0;

 18 }

上面這段代碼的第9行應該是一個錯誤,但是編譯器其實什么都查不出來,而是把第10行的計算結果作為了最終的返回值。程序編譯運行后如下:GreydeMac-mini:exp02 greyzhang$ gcc exp02.c 

GreydeMac-mini:exp02 greyzhang$ ./a.out 

8

在C語言中,return后面可以什么參數都不加,這種用法一般是用在返回值為void的函數中。返回值不為void出現什么都不加的return會出現問題嗎?我測試了一下,其實這個還真不好說,跟具體的環境有一定的關系。上面的程序修改如下:

  1 #include "stdio.h"

  2 

  3 int num =0;

  4 int value =7;

  5 

  6 int TestFunc(void)

  7 {

  8     if(num ==0)

  9     return;

 10     value += 1;

 11     return5;

 12 }

 13 

 14 int main(void)

 15 {

 16     printf("%d/n",TestFunc());

 17     return0;

 18 }

Mac中程序編譯運行:

GreydeMac-mini:exp02 greyzhang$ gcc exp02.c 

exp02.c:9:2: error:non-void function 'TestFunc' should return a value

      [-Wreturn-type]

        return;

        ^

1 error generated.

由上面的信息看來,這是個錯誤,而且幸運地被被編譯器找到了。不過,Windows下面的測試確實是不同,我目前手頭沒有Windows的環境,只能把之前下班后在公司的電腦中做的測試簡單描述下。

測試1:Windows7下使用gcc 3.4.2進行測試,輸出結果一直為16384,我不知道為什么會這樣,但是懷疑是不是跟Windows的版本號有一定關系?然而,查了軟件授權服務版本之后發現這個猜想似乎又不對。公司中的軟件版是否是正版我不是很清楚,懶得去查了,畢竟在公司是否使用正版軟件上我確實是無能無力。

測試2:Windows7的另一臺電腦,使用gcc 4.9.2測試,返回結果為0。這個結果又是讓我一陣子糊涂,到底是什么機制呢?難不成gcc在比較新的版本中對此軟件特性進行了升級?在公司的電腦中軟件安裝很不自由,在同一臺電腦上測試兩個版本的gcc不可能,具體是不是又OS的因素我不好下定論。

看了上面的幾個結果,綜合對比下,我個人覺得Mac中內置的編譯器LLVM做的應該是最好的處理。這種錯誤的隱患或者說是不確定的隱患,應該在編譯階段給出錯誤,至少也應該給出警告。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 铁岭市| 黑龙江省| 广汉市| 赞皇县| 达拉特旗| 中阳县| 武平县| 理塘县| 宽城| 鹰潭市| 滕州市| 云浮市| 辰溪县| 老河口市| 嘉鱼县| 信丰县| 东乡| 修武县| 金川县| 南乐县| 永胜县| 广昌县| 阿勒泰市| 台州市| 衡山县| 策勒县| 桦甸市| 顺义区| 收藏| 余江县| 新源县| 宁德市| 西宁市| 贵州省| 翁牛特旗| 霸州市| 沈阳市| 杭锦后旗| 长乐市| 阳谷县| 信阳市|