int main() 与 void main()
從大一入學剛接觸C到現(xiàn)在已滿7個月了,雖然剛開始就知道```int main```才是標準的寫法,但一直沒有深刻理解為什么不能用```void main```而必須使用```int main```。
剛好最近有非計算機相關專業(yè)學C的同學問我```int main```、```main```和```void``` ```main```有什么區(qū)別,便覺得是時候好好整理一番了,于是有了此博客。
?
先簡而言之
1.void 和 int 表明聲明不同的主函數(shù)返回值,不聲明則默認返回值為int整型。
2.int main可移植性強。
3.C語言從來沒聲明過```void main```,只聲明過```main()```。
3.拋棄一切用```void main```編寫C程序的習慣!
?
稍微深入
main函數(shù),又稱主函數(shù),作為絕大大部分C程序唯一的入口(比如windows編程中可以編寫一個其他windows程序都可以使用的動態(tài)鏈接庫(dll)模塊,由于DLL模塊不是獨立的程序,因此不需要main函數(shù)。再比如,用于專業(yè)環(huán)境的程序-----如機器人中的控制芯片--可能不需要main函數(shù)),是要求有返回值的,該返回值返回給操作系統(tǒng)來表明改程序的執(zhí)行狀況。返回0代表程序正常執(zhí)行成功,返回非0值代表程序異常結束,因此返回值需要是int整型,于是有了```int main()```的規(guī)范。如果使用```void main```,既聲明主函數(shù)沒有返回值的話,程序隨能編譯、運行成功,卻不利于操作系統(tǒng)判斷其狀態(tài),這對于由很多C程序構成的大型項目來說是可能會是致命的。
尤其從c99標準(1999年制定的官方C語言標準第二版)開始必須使用```int main```,如果沒加```return 0;```語句C99要求編譯器自動添加(自己寫上是個好習慣)。只聲明```main```的話系統(tǒng)默認為```int main```。```void main```無論何時都不應該使用因為主函數(shù)必須有返回值表明程序運行狀態(tài)(在很少的代碼中最少不使用```void main```是一個良好的變成習慣)。
學校老版教材推薦編寫C程序時使用的 VC6.0 是98年的產品,而C99標準見名思義在1999年制定,因此VC 不會自動添加```return 0;```。Windows下建議嘗試使用DEV C++或Visual Studio的IDE環(huán)境(集成開發(fā)環(huán)境)寫C代碼。
?
再深入一點
在最新的 C99 標準中,只有以下兩種定義方式是正確的:
int main(void){}//整數(shù)類型主函數(shù)(無類型) int main(int argc,char **argv)//整數(shù)類型主函數(shù)(整數(shù)類型 統(tǒng)計參數(shù)個數(shù),字符類型*數(shù)組指針至字符[])如果沒有int main并且不是return 0;的話,編譯完C程序后生成了exe文件,在DOS(按下Windows鍵+r鍵后輸入cmd打開)下用執(zhí)行該文件的命令時(比如是1.exe),語句后面加上 && dir 就會發(fā)現(xiàn)并沒有列出當前目錄的列表!(&& 是按先后順序執(zhí)行兩條命令的連接符,dir命令在DOS下用來列出當前所在文件下的目錄列表的~)
為什么沒執(zhí)行成功dir命令呢?正是因為寫的C程序沒有返回值,操作系統(tǒng)認為程序沒有成功執(zhí)行完畢,因此就不會執(zhí)行 && 后面的dir命令了…
上面兩種正確的定義方式一般接觸C語言階段用前者足以,括號里面的void指明主函數(shù)并不需要參數(shù),而后者:
int main(int argc, char *argv[]);表明main函數(shù)返回值為整型,帶兩個參數(shù),argc為命令行參數(shù)的個數(shù),argv為指針數(shù)組,前argc個指針為參數(shù)列表,最后一個指針值為NULL。具體見下方鏈接。
總結
以上是生活随笔為你收集整理的int main() 与 void main()的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 百宝云在线表单云平台
- 下一篇: 使用wxPython内嵌浏览器