C語言的 main 函數到底怎麼寫才是對的?

相信各位對C語言中的 main 函數大家都再熟悉不過了,這是你學習C語言首先就要學習的東西,但是我看過很多人寫的代碼包括我的一些讀者在main函數的寫法方面版本很多,今天就跟大家聊一聊main函數到底應該怎麼寫的問題。

✎ 首先來看main函數的多種寫法

一、main( )

這種寫法沒有返回值,沒有參數。

其實這種寫法使用現在的編譯器編譯時會警告,但查了一下在C89標準中是可以的,而且由於函數沒有顯式聲明返回類型那麼編譯器會將返回值默認為int的緣故,其返回值也為int。

二、void main( )

這種寫法返回值為void,沒有參數。

我一直比較好奇這種樣式是怎麼來的,main函數的返回值要作為程序退出的狀態,聲明為void在程序退出後,退出情況就不得而知了。查了C89/C99/C11相關文檔,都沒有提到任何這種寫法的痕跡,我見過最多的寫法就是這種,不清楚為什麼有這麼多初學者這麼寫。嚴格來說返回值為void是不正確的。

三、int main( )

這種寫法返回值為int,沒有參數。

這麼寫的人也不少,不過有一點要提醒一下大家:雖然聲明沒有參數,但是實際調用卻可以傳參,關於這個知識點就不多講了。

四、int main(void)

這種寫法返回值為int,參數為void。

這是最常見的一種寫法了。形參為void,表明它在調用的時候不能傳入任何參數,那麼它也就不能獲取命令行參數了。

五、int main(int argc,char *argv[])

這種寫法返回值為int,有兩個參數,第一個入參為命令行參數個數,第二個入參為命令行參數數組。

此種寫法也比較常見,通常用於實現需要從命令行獲取參數的功能。

六、int main(int argc,char *argv[],char *envp[]

這種寫法返回值為int,有三個參數,分別為命令行參數個數,命令參數數組,環境變量數組。

實際上它就比第五個多一個參數,用於獲取環境變量,但全局變量environ可以代替envp的作用 ,因這種形式的存在也是比較尷尬,不太建議。


✎ 到底應該使用哪種

前面寫了這麼多,那到底哪種是對的呢?其實官方標準已經給出了這個問題的答案,C89/C99/C11標準文檔中只提供了以下兩種main函數的寫法:

int main(void)

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

至於上面說的其他的寫法都是不符合標準的。當然如果你使用其他的寫法,不同的編譯器產生的結果是未定義的,但可以肯定的是常規的編譯器對於以上兩種標準的寫法肯定是比較支持的。

綜上所述,為了代碼的通用可移植性,建議採用標準提供的形式:不需要命令行參數可採用第四種,需要命令行參數採用第五種。大家還是要在標準規矩內行事,畢竟畏法度者最自由,寫代碼如此,其他方面也是如此,好了,就講這麼多吧。

各位,main函數怎麼寫你現在明白了嗎?

對於熱愛編程的小夥伴來說,一個好的學習氛圍是很重要的!如果你感興趣或者有需求的話,筆者有一個編程零基礎入門學習交流俱樂部,私信我【編程學習】自動獲取進入學習!還有完整的學習路線圖和學習文件視頻,歡迎初學者和正在進階的小夥伴們!


分享到:


相關文章: