作者james732 (好人超)
看板C_and_CPP
標題Re: [問題] main function 後面要不要加 return 0?
時間Wed Apr 27 16:22:29 2011
我會這麼肯定的覺得要加,是因為之前遇過這種情況:
=== test.c ===
int main() {
}
=== test.c ===
james732@james:~$ gcc test.c -o test
james732@james:~$ ./test; echo $?
4
james732@james:~$ ./test; echo $?
244
james732@james:~$ ./test; echo $?
20
讓我發現:如果沒有加上 return 0; 的話
main 的回傳值會是一個任意值,因此還是有加比較好
(雖然大部份的情況並不會去理會 main 回傳啥...)
不過看到板主的推文後,用一樣的程式再試試看:
james732@james:~$ gcc test.c -o test
-std=c99
james732@james:~$ ./test; echo $?
0
james732@james:~$ ./test; echo $?
0
james732@james:~$ ./test; echo $?
0
james732@james:~$
g++ test.c -o test
james732@james:~$ ./test; echo $?
0
james732@james:~$ ./test; echo $?
0
james732@james:~$ ./test; echo $?
0
結果很明顯了,就像版主說的
如果是C99或C++的話,main就算沒有return 0;也是回傳0,因此沒寫也無所謂
--
測試環境:Ubuntu Linux i386 + gcc 4.4.5
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.117.171.46
※ 編輯: james732 來自: 140.117.171.46 (04/27 16:23)
推 chmod:不過現行的GCC完全支援C99 所以不用寫啦? 04/27 16:24
如果編譯的時候沒有指定 -std=c99 的話,還是會用 c90 去編的
這樣就會出現 main 亂丟回傳值的情況
※ 編輯: james732 來自: 140.117.171.46 (04/27 16:25)
→ chmod:そっが~ 謝謝指教 04/27 16:26
→ uranusjr:是そっか好嗎... 04/27 16:35
→ chmod:阿咧 打錯了... 04/27 16:37
推 purpose:如果沒有其他程式要讀取 $? 那回傳垃圾值也是無所謂 04/27 16:39
→ purpose:作業系統應該不會因為程式結束後的 $? 是 0 而有差別待遇 04/27 16:40
推 loveme00835:推實驗精神 XD 04/27 16:56
→ nowar100:預設應該是gnu89吧 XD 04/27 17:37
囧,我誤會了,感謝提醒 XD
※ 編輯: james732 來自: 140.117.171.46 (04/27 17:41)
推 ducksteven:看到 int main 不加 return 0 我會焦慮不安 -_- 04/27 19:02
推 xatier:推超哥實驗精神! 04/27 21:45