為什么main()函數要返回int值


在 C89 中,void main( ) 是正確的。Brian W. Kernighan 和 Dennis M. Ritchie 的經典巨著 The C programming Language用的就是main( )。

在最新的 C99 標准中,只有以下兩種定義方式是正確的:
int main()
int main( int argc, char *argv[] )
(參考資料:ISO/IEC 9899:1999 (E) Programming languages — C 5.1.2.2.1 Program startup)

如果你不需要從命令行中獲取參數,請用 int main() ;否則請用 int main( int argc, char *argv[] ) 。

假設用戶的命令由command執行,首先command把程序加入內存,然后設置CPU的CS:IP指向程序的第一條指令(也就是程序入口),從而使程序得以運行.程序結束后,返回到command中,CPU繼續運行command.注意在返回的時候要有一個返回值,這樣才能安全退出程序之后各寄存器會有恢復動作,如果沒有返回值,雖然表面上看程序也正常結束了,但實際上它並沒有退出,各寄存器並沒有恢復,如CS:IP 還是指向程序尾部,如果得到CS:IP,那么可以讓程序繼續執行下去,但是所執行的程序已經不是你的代碼所在的那段內存空間了,它在執行其它內存中的程序


main 函數的返回值類型必須是 int ,這樣返回值才能傳遞給程序的激活者(如操作系統)。

如果 main 函數的最后沒有寫 return 語句的話,C99 規定編譯器要自動在生成的目標文件中(如 exe 文件)加入 return 0 ,表示程序正常退出,譬如gcc3.2(Linux 下的 C 編譯器)會在生成的目標文件中加入 return 0。但是不是所有的編譯器都是如此做, 有的是提示錯誤, 有的會提示warning自動添加。

在 C 和 C++ 中,不接收任何參數也不返回任何信息的函數原型為“void func();”。可能正是因為這個,所以很多人都誤認為如果不需要程序返回值時可以把main函數定義成void main(void) 。然而這是錯誤的!main 函數的返回值應該定義為 int 類型,C 和 C++ 標准中都是這樣規定的。雖然在一些編譯器中,void main 可以通過編譯(如 vc6),但並非所有編譯器都支持 void main ,因為標准中從來沒有定義過 void main 。g++3.2 中如果 main 函數的返回值不是 int 類型,就根本通不過編譯。而 gcc3.2 則會發出警告。所以,如果你想你的程序擁有很好的可移植性,請一定要用 int main .

 


免責聲明!

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



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