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

2021-10-04 23:06:09 字數 3130 閱讀 2281

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

main函式版本

main()

如果瀏覽舊式的c**,會發現程式以如下形式開始:

#include

main()

編譯執行:

上面的main()沒有返回值,沒有入參。在c89標準中,這種寫法是可以接受的。

但使用現在的編譯器編譯時,會報告警,並且會將其返回值預設為int。

實際上,如果函式沒有顯式宣告返回型別,那麼編譯器會將返回值預設為int。

void main()

返回值為void,沒有入參

void

main

()

最開始學c語言的時候,看的一些書上也寫著void main(),

那個時候並沒有覺得有什麼不妥,畢竟main函式執行完了程式也就結束了。

就算它有返回值又能返回到**呢?

後來見識多了以後才知道void main()是錯的,main()函式指的是程式入口,由作業系統呼叫,最後返還給作業系統乙個狀態碼。

通常都是返回0表示程式執行成功,如果程式執行過程中丟擲異常了,或者被任務管理器強制結束了,那麼這個返回碼就不是0了。

哦,對了,還有就是寫微控制器開發程式時,程式都是死迴圈永不終止的,那麼既然不會返回給作業系統,這時候寫成void main()完全正確。

#include

"project.h"

void

timer0init

(void

)//2毫秒@11.0592mhz

void

main()

temp=

ds18b20_read()

;//讀18b20

ds1302_read()

;//讀1302

tem =

pcf8591_read(0

);//判斷rb2 電壓輸出為 5v 時對應濕度為 99%

// cover=pcf8591_read(3); //光敏電阻

button()

;//按鍵}}

void

t0_time

() interrupt 1

看,這微控制器**是以前上學時候寫的乙個dome。可以看到用void main() 這種寫法。。。

int main(void)

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

int main()

返回值為int,沒有引數,看起來似乎和int main(void)沒有什麼區別,但這種形式卻有些許不同。雖然它的宣告沒有入參,實際呼叫卻可以傳入引數。來看看個例子:

#include

void

test()

;int

main()

void

test

(int a)

編譯執行:

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

是不是太神奇了。

返回值為int,有兩個入參

int

main

(int argc,

char

*ar**[

])

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

#include

intmain

(int argc,

char

** ar**)

編譯執行:

char **ar**等價於 char *ar** 等價於char ar**

返回值為int,有三個入參

#include

intmain

(int argc,

char

** ar**,

char

*env)

for(i =

0; env[i]

!=null

; i++

)return0;

}

編譯執行:

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

總結

在c89/c99/c11標準文件中。只提供了兩種main函式的寫法

int main(void)

int main(int argc, char ar**)

也就是說,其他的寫法都是不符合標準的,有的是歷史遺留問題,有的是編譯器擴充套件,更有的不知從何而來。

C語言main 函式應該怎麼寫

main 函式又稱主函式,是程式執行的起點,在乙個c程式中可以建立多個函式,但計算機總是先執行main 函式,學習的過程中我們可能會遇到多種main 函式形式,但哪一種才是正確的呢?下面列舉了幾種常見的main 函式形式 main 函式,沒有返回值,也沒有引數 include void main v...

C語言main函式

c語言中main函式是可以帶引數的,平時寫倒是沒怎麼用這個引數,學習了一下這個引數。c語言規定了main函式只能有兩個引數,並且其型別也規定了,習慣上把他們寫成 main int argc char argv 第乙個引數是整形,第二個引數是指向字串的指標陣列,為什麼這麼定義?有什麼用?c語言還規定了...

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

其實程式啟動後的第乙個執行的函式並非main函式,但是main函式卻是執行我們自己寫的第乙個函式此處參考 main 是程式執行的第乙個函式嗎?c語言程式總是從main函式開始執行嗎?第一種,沒有返回值,沒有入參 main 在c89標準中,這種寫法是可以接受的,但使用現在的編譯器編譯時,會報告警,並且...