對于C語言:在C89標準中,main() 的形式是可以接受的,當然使用如下的C99標準更明智,因為在這個標準中只有如下格式才能被接受: int main ( void ) int main ( int argc, char *argv[] ) 我們可以對main函數做輕微的改變,比如我們可以用一個自定義的類型代替int(當然這個類型必須被定義為int型),還可以把*argv[]改為**argv,等等。 如果我們不想在命令行下對程序輸入參數,可以選擇第一種形式。 其實第二種形式的兩個參數argc,argv的名稱是可以改變的,但保持原樣是更明智的選擇。 main()函數的返回類型必須為int;返回的整形值作為傳遞給調用者的一個返回碼。(this allows a return code to be passed to the invoker)對于C++:以下是可以接受的格式: int main ( int argc, char *argv[] ) int main () 第一種格式遵從C99標準;第二種格式在不需要通過命令行向程序傳遞參數時使用,與C99標準中規定的格式int main(void)效果相同。 (C)int main()與int main(void)之間的區別: 很多C程序員都曾搞錯的一個概念,就是以為這樣一個函數不接受任何參數:int foo();事實上,這個函數被認為可以接受未知個數的參數(譯:可接受任意多的參數?。U_的用法是在括號內添加關鍵字void。 在C/C++正規的調用/返回函數中,如果你不想讓一個函數返回任何值,你可以使用void定義返回類型。比如,一個不接受任何參數并且無任何返回值的函數原型可以像這樣: void foo(void); 一個常見的誤解是,這種邏輯同樣適用于main()函數。呵呵,事實并非如此,main()函數是很特殊的,無論何時你都應該依照標準定義main()函數(譯:即使用int main()的形式!),并把返回值定義為int。有時void main()的例外形式是可以出現的,但這僅限于某些特定的系統。如果你不敢肯定正在使用這些系統,那么答案很簡單,不能使用void main()的形式。 如果你在論壇上寫了像“void main”這樣的代碼而被警告,那么最好改過來。不要用"我的老師告訴我這么做是對的"之類的話來為自己開脫;老師們總是習慣犯錯誤(teachers have a bad habit of being wrong)。寫安全的,合乎標準的代碼,大家就可以專注于你程序中其它的問題而不是在這種規范方面的東西上浪費時間。 好比是標準的擴展版,main()函數可以在一些系統中提取一個額外的參數用來訪問環境變量。這個用法不能保證在每個編譯環境中都行得通,所以使用 envp 這個參數是還是謹慎為妙。
2017-02-05
不同的編譯環境不一樣,在VS2010中都可以
2016-10-30
可以用void main,那就不要返回值;使用int main,就要有return 0;但剛剛看見說最新的好像是要int main,記得我學的時候就是用的void main,不過,既然改了,就改一下唄。加一個返回值也沒什么變化。
2016-10-23
詳細解釋:
對于C語言:在C89標準中,main() 的形式是可以接受的,當然使用如下的C99標準更明智,因為在這個標準中只有如下格式才能被接受:
int main ( void )
int main ( int argc, char *argv[] )
我們可以對main函數做輕微的改變,比如我們可以用一個自定義的類型代替int(當然這個類型必須被定義為int型),還可以把*argv[]改為**argv,等等。
如果我們不想在命令行下對程序輸入參數,可以選擇第一種形式。
其實第二種形式的兩個參數argc,argv的名稱是可以改變的,但保持原樣是更明智的選擇。
main()函數的返回類型必須為int;返回的整形值作為傳遞給調用者的一個返回碼。(this allows a return code to be passed to the invoker)對于C++:以下是可以接受的格式:
int main ( int argc, char *argv[] )
int main ()
第一種格式遵從C99標準;第二種格式在不需要通過命令行向程序傳遞參數時使用,與C99標準中規定的格式int main(void)效果相同。
(C)int main()與int main(void)之間的區別:
很多C程序員都曾搞錯的一個概念,就是以為這樣一個函數不接受任何參數:int foo();事實上,這個函數被認為可以接受未知個數的參數(譯:可接受任意多的參數?。U_的用法是在括號內添加關鍵字void。
在C/C++正規的調用/返回函數中,如果你不想讓一個函數返回任何值,你可以使用void定義返回類型。比如,一個不接受任何參數并且無任何返回值的函數原型可以像這樣:
void foo(void);
一個常見的誤解是,這種邏輯同樣適用于main()函數。呵呵,事實并非如此,main()函數是很特殊的,無論何時你都應該依照標準定義main()函數(譯:即使用int main()的形式!),并把返回值定義為int。有時void main()的例外形式是可以出現的,但這僅限于某些特定的系統。如果你不敢肯定正在使用這些系統,那么答案很簡單,不能使用void main()的形式。
如果你在論壇上寫了像“void main”這樣的代碼而被警告,那么最好改過來。不要用"我的老師告訴我這么做是對的"之類的話來為自己開脫;老師們總是習慣犯錯誤(teachers have a bad habit of being wrong)。寫安全的,合乎標準的代碼,大家就可以專注于你程序中其它的問題而不是在這種規范方面的東西上浪費時間。
好比是標準的擴展版,main()函數可以在一些系統中提取一個額外的參數用來訪問環境變量。這個用法不能保證在每個編譯環境中都行得通,所以使用 envp 這個參數是還是謹慎為妙。
摘錄自:C primer plus第五版(中文版)
2016-10-23
這是C99的標準規定,void main()已經淘汰