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標準中,這種寫法是可以接受的,但使用現在的編譯器編譯時,會報告警,並且...