[標準] main() 的 prototype

看板C_and_CPP (C/C++)作者 (Khoguan Phuann)時間19年前 (2005/06/13 22:34), 編輯推噓2(201)
留言3則, 2人參與, 最新討論串1/1
據 C++ 標準,main() 這個主函式應該這樣寫 int main() { //... return 0; // 正常結束的話就傳回 0 } 或是 int main(int argc, char* argv[]) { //... return 0; } 每種編譯環境至少要能支援上述兩種 main(), 要支援更多參數的 main() 則由其自訂。像有的環境會支援第三個參數,傳環境變數 的值。 網路上、書本上,常見有人寫 void main() 甚至是 main() 這些都是不合標準的,不但不合 C++ 標準,也不合 C 標準(C99)。 有一點很特殊的是,雖然標準要求要以 int 做傳回的 type, 但 是不要求一定要明文寫 return 0; 標準文件的 3.6.1/5 說: A return statement in main has the effect of leaving the main function (destroying any objects with automatic storage duration) and calling exit with the return value as the argument. If control reaches the end of main without encountering a return statement, the effect is that of executing return 0; 所以 main 中不寫 return 敘述是正確的。當然,只有 main 才這樣, 其他的 function, 若是 return type 不是 void, 都要寫 return 敘述。 以上是澄清一些許多人搞不清楚,但其實很基本的東西。他們會搞不 清楚,實在是受到個別不良編譯器及書籍的誤導。令人 Orz 的 VC++ 6.x 聽說就是這樣。該 warning 的不 warning ( void main ), 不該 warning 的在那裡嚷嚷 ( main 中沒寫 return )。 main 還有一些相關細節,先寫到這裡。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.130.208.166

61.62.49.43 06/13, , 1F
沒有回傳值的函數預設不是為int嗎@.@?
61.62.49.43 06/13, 1F

61.62.49.43 06/13, , 2F
XD...雖然這是compiler玩出來的XD
61.62.49.43 06/13, 2F

220.130.208.166 06/14, , 3F
C有這種預設,C++不行。C99也不行。
220.130.208.166 06/14, 3F
※ 編輯: khoguan 來自: 220.130.208.168 (08/24 14:53)
文章代碼(AID): #12hPbywK (C_and_CPP)
文章代碼(AID): #12hPbywK (C_and_CPP)