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淤井;