「C語言」int main還是void main?


從大一入學剛接觸C到現在已滿7個月了,雖然剛開始就知道```int main```才是標准的寫法,但一直沒有深刻理解為什么不能用```void main```而必須使用```int main```。

剛好最近有非計算機相關專業學C的同學問我```int main```、```main```和```void``` ```main```有什么區別,便覺得是時候好好整理一番了,於是有了此博客。

 

先簡而言之
1.void 和 int 表明聲明不同的主函數返回值,不聲明則默認返回值為int整型。
2.int main可移植性強。
3.C語言從來沒聲明過```void main```,只聲明過```main()```。
3.拋棄一切用```void main```編寫C程序的習慣!

 

稍微深入

main函數,又稱主函數,作為絕大大部分C程序唯一的入口(比如windows編程中可以編寫一個其他windows程序都可以使用的動態鏈接庫(dll)模塊,由於DLL模塊不是獨立的程序,因此不需要main函數。再比如,用於專業環境的程序-----如機器人中的控制芯片--可能不需要main函數),是要求有返回值的,該返回值返回給操作系統來表明改程序的執行狀況。返回0代表程序正常執行成功,返回非0值代表程序異常結束,因此返回值需要是int整型,於是有了```int main()```的規范。如果使用```void main```,既聲明主函數沒有返回值的話,程序隨能編譯、運行成功,卻不利於操作系統判斷其狀態,這對於由很多C程序構成的大型項目來說是可能會是致命的。

尤其從c99標准(1999年制定的官方C語言標准第二版)開始必須使用```int main```,如果沒加```return 0;```語句C99要求編譯器自動添加(自己寫上是個好習慣)。只聲明```main```的話系統默認為```int main```。```void main```無論何時都不應該使用因為主函數必須有返回值表明程序運行狀態(在很少的代碼中最少不使用```void main```是一個良好的變成習慣)。

學校老版教材推薦編寫C程序時使用的 VC6.0 是98年的產品,而C99標准見名思義在1999年制定,因此VC 不會自動添加```return 0;```。Windows下建議嘗試使用DEV C++或Visual Studio的IDE環境(集成開發環境)寫C代碼。

 

再深入一點

在最新的 C99 標准中,只有以下兩種定義方式是正確的:

int main(void){}//整數類型主函數(無類型)
int main(int argc,char **argv)//整數類型主函數(整數類型 統計參數個數,字符類型*數組指針至字符[])

如果沒有int main並且不是return 0;的話,編譯完C程序后生成了exe文件,在DOS(按下Windows鍵+r鍵后輸入cmd打開)下用執行該文件的命令時(比如是1.exe),語句后面加上 && dir 就會發現並沒有列出當前目錄的列表!(&& 是按先后順序執行兩條命令的連接符,dir命令在DOS下用來列出當前所在文件下的目錄列表的~)

為什么沒執行成功dir命令呢?正是因為寫的C程序沒有返回值,操作系統認為程序沒有成功執行完畢,因此就不會執行 && 后面的dir命令了…

上面兩種正確的定義方式一般接觸C語言階段用前者足以,括號里面的void指明主函數並不需要參數,而后者:

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

表明main函數返回值為整型,帶兩個參數,argc為命令行參數的個數,argv為指針數組,前argc個指針為參數列表,最后一個指針值為NULL。具體見下方鏈接。


參考鏈接和可深入理解C的其它鏈接:
main函數_百度百科:http://baike.baidu.com/link?url=QPL_sSuIxACVYcdTzY43iXtxLGWUPY8inpjL2hZZPFscJZehGeHPUlqf_qG2xPtKKY-tlZPrm78Rsw3TwM-D7a#4_3
C99_百度百科:http://baike.baidu.com/link?url=wGdu4AOAT462i_loNUmdUSqMYXoE-Dur0qQSuHRkXbdy-ib-wMnLp7rrJIwhh_tkf1fICH4JcUkMZ_4n_yIOy_
void main()還是int main()_百度貼吧:http://tieba.baidu.com/p/2085028518
int main(int argc,char* argv[])詳解:http://www.cnblogs.com/avril/archive/2010/03/22/1691477.html
C語言啟動代碼:http://blog.sina.com.cn/s/blog_53c1950a01011vch.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM