C語言 main函式到底有幾種寫法?

2021-10-02 10:47:58 字數 2053 閱讀 1765

其實程式啟動後的第乙個執行的函式並非main函式,但是main函式卻是執行我們自己寫的第乙個函式
此處參考:

main()是程式執行的第乙個函式嗎?

c語言程式總是從main函式開始執行嗎?

第一種,沒有返回值,沒有入參:
main

()

在c89標準中,這種寫法是可以接受的,但使用現在的編譯器編譯時,會報告警,並且會將其返回值預設為int。實際上,如果函式沒有顯式宣告返回型別,那麼編譯器會將返回值預設為int。

c語言的創始人丹尼斯·里奇在他的《c程式語言》中用的就是這一寫法。

第二種,返回值為void,沒有入參:

void

main

()

這種形式的**不得而知。但是為何這麼多初學者使用?main函式的返回值最終會作為程式的退出狀態,而一旦宣告為void,在程式退出後,想要獲取其退出狀態也就不可以了。因此不建議其返回值為void。

第三種,返回值為int,引數為void:

int

main

(void

)

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

第四種,返回值為int,沒有引數:

int

main

()

看起來似乎和第三種沒有什麼區別,但這種形式卻有些許不同。雖然它的宣告沒有入參,實際呼叫卻可以傳入引數,看下面的例子:

#include

void

test()

;int

main()

void

test

(int a)

對於上面的程式,我們仍然可以編譯並正常執行,test函式雖然宣告為無入參,但呼叫時卻是可以傳入任何引數或不傳引數的。

第五種,返回值為int,有兩個入參:

int

main

(int argc,

char

*ar**[

])

這也是最常見的一種寫法。第乙個入參為命令列引數個數,第二個入參為命令列引數陣列。通常用於實現需要從命令列獲取引數的功能。

第六種,返回值為int,有三個入參:

int

main

(int argc,

char

*ar**,

char

*envp[

]

這種和第五種相似,但多了乙個引數,用於獲取環境變數,這種形式多源於編譯器的擴充套件。但全域性變數environ可以代替envp的作用,獲取或者設定環境變數可以使用getenv或putenv,因此也沒有必要使用該形式。

沒想到吧,仔細數一數竟然有這麼種寫法?但是真相究竟如何?到底使用哪種呢?

int

main

(void

)

int

main

(int argc,

char

*ar**)

也就是說,其他的寫法都是不符合標準的,有的是歷史遺留問題,有的是編譯器擴充套件,更有的不知從何而來。當然對於帶引數的寫法,其引數名可自定義。另外對於除標準提供的以外的寫法,不同的編譯器有不同的處理策略,有的可能編譯不過,有的可能報警告,但乙個「正經」的編譯器是不會對標準提供的形式產生質疑的。

本文出處:

c語言的main函式到底該怎麼寫?

【**】main函式的三個引數

VBS中的SetLocale函式到底有什麼用?

vbs文件中對setlocale函式的描述 設定全球區域設定,並返回以前的區域設定。乙個 locale 是使用者參考資訊集合,與使用者的語言 國家 地區和文化傳統有關。該 locale 決定鍵盤布局 字www.cppcns.com母排序順序和日期 時間 數字與貨幣格式。簡單的說,就是vbs中的一些函...

C語言的main函式你到底怎麼寫?

c程式一定從main 函式開始執行的 目前不考慮例外的情況 就是乙個大家遵守的規定。被寫到了c99規範 但是從開始學習c語言到現在,我們似乎看到了很多個版本的main函式,那麼哪一種才是正確的呢?main函式版本 main 如果瀏覽舊式的c 會發現程式以如下形式開始 include main 編譯執...

C語言 到底有多二

7 26 到底有多二 20 分 乙個整數 犯二的程度 定義為該數字中包含2的個數與其位數的比值。如果這個數是負數,則程度增加0.5倍 如果還是個偶數,則再增加1倍。例如數字 13142223336是個11位數,其中有3個2,並且是負數,也是偶數,則它的犯二程度計算為 3 11 1.5 2 100 約...