摘要:您不一定非要,但您應該。
在C90中,在沒有執行return
語句的情況下到達main()
的末尾,「返回到主機環境的終止狀態未定義」。至少在我使用過的一個系統上,返回的狀態是1,在那個系統上表明程序失敗。
C99增加了一個新規則,說到main()
的末尾返回0.(C++有相同的規則。)並非所有的編譯器都完全實現了C99,並且那些默認情況下默認行爲不像默認的C99編譯器。
可以從main()
返回唯一的便攜式的值是0,EXIT_SUCCESS
,和EXIT_FAILURE
(後兩者都在<stdlib.h>
定義0和EXIT_SUCCESS
指示該節目成功(和EXIT_SUCCESS
通常被定義爲0); EXIT_FAILURE
表示程序失敗return 1;
很常見,但不可移植;我在一個系統(VMS)上工作,終止狀態爲1表示成功,如果您希望程序是可移植的,請使用EXIT_FAILURE
表示失敗;這就是這對一些系統和程序定義其他或特定應用系統特定的狀態代碼。
對於便攜性(和,恕我直言,風格),最好在main()
的盡頭做一個明確的return 0;
,雖然在任何情況下都不需要。添加一行代碼(最壞的情況是無害的)要比浪費時間確定是否需要更容易。
注意,對於main()
正確的定義是:
int main(void) { /* ... */ }
和
int main(int argc, char *argv[]) { /* ... */ }
或同等學歷(例如,你可以寫char **argv
而非char *argv[]
)。 int main() { /* ... */ }
是否有效是值得懷疑的,因爲我不會在這裏進行微妙的理由。同樣,添加void
關鍵字比確定是否需要它浪費時間更容易。
了大量的書籍和教程使用void main()
或void main(void)
。一個特定的編譯器可能會選擇允許這樣做,但它不是可移植的。在書或教程中看到void main
是一個很好的信號,表明作者不太瞭解C標準,並且您應該找到其他東西來學習。
沒有必要,但需要。 – Philip