国产探花免费观看_亚洲丰满少妇自慰呻吟_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做的應該是最好的處理。這種錯誤的隱患或者說是不確定的隱患,應該在編譯階段給出錯誤,至少也應該給出警告。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 邯郸市| 静海县| 衡山县| 郴州市| 甘谷县| 麻江县| 莆田市| 方正县| 潜江市| 西安市| 东宁县| 禹城市| 蒲江县| 广安市| 崇左市| 古蔺县| 南雄市| 临夏县| 仁化县| 深州市| 瓮安县| 报价| 湖北省| 靖州| 新建县| 徐闻县| 庐江县| 含山县| 石台县| 内乡县| 英德市| 福建省| 穆棱市| 蒙自县| 来安县| 岗巴县| 永胜县| 龙里县| 庆城县| 清徐县| 遂昌县|