看板 C_and_CPP 關於我們 聯絡資訊
我會這麼肯定的覺得要加,是因為之前遇過這種情況: === 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
COLDTURNIP:http://en.wikipedia.org/wiki/Exit_status 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