C語(yǔ)言深度總結(jié)[全面認(rèn)識(shí)main函數(shù)返回值類型]

C語(yǔ)言main函數(shù)返回值類型支持哪些继找?

????????main函數(shù)的返回值喘帚,用于說(shuō)明程序的退出狀態(tài)。?return返回的數(shù)值由程序的作者自定恨狈。返回不同的值可以代表不同的含義,一般是代表出錯(cuò)的原因呛讲。如果返回0禾怠,則代表程序正常退出;返回其它數(shù)字的含義則由系統(tǒng)決定贝搁。通常吗氏,返回非零代表程序異常退出。

C語(yǔ)言有兩個(gè)宏,它定義在?stdlib.h?中雷逆。順便提一哈弦讽,也許聰明厲害的你早就知道了。

?????#define EXIT_SUCCESS??? 0

?????#define EXIT_FAILURE????? ?1

???? 默認(rèn)EXIT_SUCCESS 為成功返回关面, EXIT_FAILURE 為出錯(cuò)返回坦袍,相當(dāng)于調(diào)用abort()函數(shù)。

下面分別說(shuō)一下 C 和 C++ 標(biāo)準(zhǔn)中對(duì) main 函數(shù)的定義等太。?

????????在 C89 中捂齐,main( ) 是可以接受的。Brian W. Kernighan 和 Dennis M. Ritchie 的經(jīng)典巨著 The C

programming Language 2e(《C 程序設(shè)計(jì)語(yǔ)言第二版》)用的就是 main( )缩抡。不過(guò)在最新的 C99 標(biāo)準(zhǔn)中奠宜,只有以下兩種定義方式是正確的:?

?????????? int main( void )?

?????????? int main( int argc, char *argv[] )?

如果不需要從命令行中獲取參數(shù)包颁,請(qǐng)用int main(void) ;否則請(qǐng)用int main( int argc, char *argv[] )压真。 main 函數(shù)的返回值類型必須是 int 娩嚼,這樣返回值才能傳遞給程序的激活者(如操作系統(tǒng)),等同于? exit(0)滴肿。

如果 main 函數(shù)的最后沒(méi)有寫(xiě) return 語(yǔ)句的話岳悟,C99 規(guī)定編譯器要自動(dòng)在生成的目標(biāo)文件中(如 exe 文件)加入return 0;,表示程序正常退出泼差。不過(guò)贵少,建議你最好在main函數(shù)的最后加上return語(yǔ)句,雖然沒(méi)有這個(gè)必要堆缘,但這是一個(gè)好的習(xí)慣滔灶。注意,vc6不會(huì)在目標(biāo)文件中加入return 0; 吼肥,大概是因?yàn)?vc6 是 98年的產(chǎn)品录平,所以才不支持這個(gè)特性。不過(guò)缀皱,gcc3.2(Linux 下的 C編譯器)會(huì)在生成的目標(biāo)文件中加入 return 0斗这。

C++98 中定義了如下兩種 main 函數(shù)的定義方式:

??????????int main( )?

??????????int main( int argc, char *argv[] )?

????????int main( ) 等同于 C99 中的 int main( void ) ;int main( int argc, char*argv[] ) 的用法也和C99 中定義的一樣唆鸡。同樣涝影,main函數(shù)的返回值類型也必須是int。如果main函數(shù)的末尾沒(méi)寫(xiě)return語(yǔ)句争占,C++98 規(guī)定編譯器要自動(dòng)在生成的目標(biāo)文件中加入 return 0; 燃逻。同樣,vc6 也不支持這個(gè)特性臂痕,但是 g++3.2(Linux 下的 C++編譯器)支持伯襟。

現(xiàn)在我們來(lái)做一個(gè)小試驗(yàn)來(lái)觀察main()函數(shù)的返回值。

注意:本系列我都在Mac下開(kāi)發(fā)演示握童,但適用于unix/linux系統(tǒng)姆怪。如果在Windows系統(tǒng)有不一樣的表現(xiàn)時(shí),我會(huì)指明澡绩。

編寫(xiě)如下代碼并編譯運(yùn)行:

???//a.c????

????#include "stdio.h"

????int main(void)

????{

????????printf("I love you.");

????????return 0;

????}

????將這個(gè)文件保存為a.c稽揭,編譯運(yùn)行后會(huì)生成一個(gè)a.out文件。現(xiàn)在打開(kāi)命令提示符肥卡,在命令行里運(yùn)行剛才編譯好的可執(zhí)行文件溪掀,然后輸入?? echo $? ,回車步鉴,就可以看到程序返回 一個(gè)0 揪胃。如果把 return 0; 改為 return 110; 璃哟,那么很顯然,再次執(zhí)行上述步驟以后你可以看到程序返回110喊递。要是你這樣寫(xiě) return 110.01; 那還是返回110随闪,因?yàn)?10.01被傳給操作系統(tǒng)之前,被強(qiáng)制類型轉(zhuǎn)換成整數(shù)類型了骚勘。

????現(xiàn)在铐伴,我們把a(bǔ).c改回原來(lái)的代碼,然后再編寫(xiě)另一個(gè)程序b.c:

????//b.c

????#include "stdio.h"

????int main(void)

????{

????????printf("\nI'm too.");

????????return 0;?

????}

????編譯運(yùn)行后打開(kāi)命令提示符调鲸,在命令行里輸入a&&b 回車盛杰,這樣你就可以看到《人鬼情未了》里面經(jīng)典的愛(ài)情對(duì)白:

????I love you.

????I'm too.

????&& 的含義是:如果 && 前面的程序正常退出,則繼續(xù)執(zhí)行 && 后面的程序藐石,否則不執(zhí)行。所以定拟,要是把a(bǔ).c里面的 return 0; 刪除或者改為 return 99; 于微,那么你只能看到 I love you. 。也就是說(shuō)青自,程序b.c就不執(zhí)行了≈暌溃現(xiàn)在,大家該明白 return 0; 的作用了吧延窜。

總結(jié)

1.main函數(shù)的返回值為int恋腕,請(qǐng)牢記在心。用于說(shuō)明程序的退出狀態(tài)逆瑞。如果返回0荠藤,則代表程序正常退出;返回其它數(shù)字的含義則由系統(tǒng)決定获高。通常哈肖,返回非零代表程序異常退出。

2.無(wú)論在任何平臺(tái)做C語(yǔ)言開(kāi)發(fā)念秧,main函數(shù)最后一行代碼請(qǐng)留給return 0淤井;

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市摊趾,隨后出現(xiàn)的幾起案子币狠,更是在濱河造成了極大的恐慌,老刑警劉巖砾层,帶你破解...
    沈念sama閱讀 210,978評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件漩绵,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡梢为,警方通過(guò)查閱死者的電腦和手機(jī)渐行,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門轰坊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人祟印,你說(shuō)我怎么就攤上這事肴沫。” “怎么了蕴忆?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,623評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵颤芬,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我套鹅,道長(zhǎng)站蝠,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,324評(píng)論 1 282
  • 正文 為了忘掉前任卓鹿,我火速辦了婚禮菱魔,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘吟孙。我一直安慰自己澜倦,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,390評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布杰妓。 她就那樣靜靜地躺著藻治,像睡著了一般。 火紅的嫁衣襯著肌膚如雪巷挥。 梳的紋絲不亂的頭發(fā)上桩卵,一...
    開(kāi)封第一講書(shū)人閱讀 49,741評(píng)論 1 289
  • 那天,我揣著相機(jī)與錄音倍宾,去河邊找鬼雏节。 笑死,一個(gè)胖子當(dāng)著我的面吹牛凿宾,可吹牛的內(nèi)容都是我干的矾屯。 我是一名探鬼主播,決...
    沈念sama閱讀 38,892評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼初厚,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼件蚕!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起产禾,我...
    開(kāi)封第一講書(shū)人閱讀 37,655評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤排作,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后亚情,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體妄痪,經(jīng)...
    沈念sama閱讀 44,104評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年楞件,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了衫生。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片裳瘪。...
    茶點(diǎn)故事閱讀 38,569評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖罪针,靈堂內(nèi)的尸體忽然破棺而出彭羹,到底是詐尸還是另有隱情,我是刑警寧澤泪酱,帶...
    沈念sama閱讀 34,254評(píng)論 4 328
  • 正文 年R本政府宣布派殷,位于F島的核電站,受9級(jí)特大地震影響墓阀,放射性物質(zhì)發(fā)生泄漏毡惜。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,834評(píng)論 3 312
  • 文/蒙蒙 一斯撮、第九天 我趴在偏房一處隱蔽的房頂上張望经伙。 院中可真熱鬧,春花似錦吮成、人聲如沸橱乱。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,725評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至作瞄,卻和暖如春茶宵,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背宗挥。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,950評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工乌庶, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人契耿。 一個(gè)月前我還...
    沈念sama閱讀 46,260評(píng)論 2 360
  • 正文 我出身青樓瞒大,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親搪桂。 傳聞我的和親對(duì)象是個(gè)殘疾皇子透敌,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,446評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • Lua 5.1 參考手冊(cè) by Roberto Ierusalimschy, Luiz Henrique de F...
    蘇黎九歌閱讀 13,763評(píng)論 0 38
  • 指針是C語(yǔ)言中廣泛使用的一種數(shù)據(jù)類型。 運(yùn)用指針編程是C語(yǔ)言最主要的風(fēng)格之一踢械。利用指針變量可以表示各種數(shù)據(jù)結(jié)構(gòu)酗电; ...
    朱森閱讀 3,429評(píng)論 3 44
  • 最近在論壇上看到有不少網(wǎng)友的程序中,main函數(shù)都寫(xiě)成void main()内列,而不是int main()撵术。那么,到...
    ZayAlan閱讀 2,800評(píng)論 0 1
  • 題目類型 a.C++與C差異(1-18) 1.C和C++中struct有什么區(qū)別话瞧? C沒(méi)有Protection行為...
    阿面a閱讀 7,643評(píng)論 0 10
  • 前言 Tomcat遵循J2EE規(guī)范嫩与,實(shí)現(xiàn)了Web容器寝姿。很多有關(guān)web的書(shū)籍和文章都離不開(kāi)對(duì)Tomcat的分析,初學(xué)...
    holy_z閱讀 822評(píng)論 0 1