Re: [問題] main function 後面要不要加 return 0?

看板C_and_CPP作者 (好人超)時間13年前 (2011/04/27 16:22), 編輯推噓6(605)
留言11則, 8人參與, 最新討論串2/2 (看更多)
我會這麼肯定的覺得要加,是因為之前遇過這種情況: === 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)

04/27 16:24, , 1F
不過現行的GCC完全支援C99 所以不用寫啦?
04/27 16:24, 1F
如果編譯的時候沒有指定 -std=c99 的話,還是會用 c90 去編的 這樣就會出現 main 亂丟回傳值的情況 ※ 編輯: james732 來自: 140.117.171.46 (04/27 16:25)

04/27 16:26, , 2F
そっが~ 謝謝指教
04/27 16:26, 2F


04/27 16:35, , 4F
是そっか好嗎...
04/27 16:35, 4F

04/27 16:37, , 5F
阿咧 打錯了...
04/27 16:37, 5F

04/27 16:39, , 6F
如果沒有其他程式要讀取 $? 那回傳垃圾值也是無所謂
04/27 16:39, 6F

04/27 16:40, , 7F
作業系統應該不會因為程式結束後的 $? 是 0 而有差別待遇
04/27 16:40, 7F

04/27 16:56, , 8F
推實驗精神 XD
04/27 16:56, 8F

04/27 17:37, , 9F
預設應該是gnu89吧 XD
04/27 17:37, 9F
囧,我誤會了,感謝提醒 XD ※ 編輯: james732 來自: 140.117.171.46 (04/27 17:41)

04/27 19:02, , 10F
看到 int main 不加 return 0 我會焦慮不安 -_-
04/27 19:02, 10F

04/27 21:45, , 11F
推超哥實驗精神!
04/27 21:45, 11F
文章代碼(AID): #1Djz98Lm (C_and_CPP)
文章代碼(AID): #1Djz98Lm (C_and_CPP)