2011-09-27 89 views
3

C不支持函數重載。那麼我們怎麼能有3個主要的原型? 有3個原型的歷史原因是什麼?爲什麼我們在C中有main的多個聲明?

+0

您的問題的答案可以在這裏找到:http://stackoverflow.com/questions/5296163/why-is-the-type-of-the-main-function-in-c-and-c-left用戶定義/ 5296593#5296593 – Lundin

回答

9

main只有兩個原型需要符合標準的C實現來識別:int main(void)int main(int, char *[])。這不是超載,因爲每個程序仍然只有一個main;在一個程序中有一個void foo(int, double),而在另一個程序中有一個char *foo(FILE *)也不會超載。

這兩個原型的原因很方便:一些應用程序需要命令行參數,而其他應用程序則不需要它們。

所有其他原型,如void main(void)int main(int, char *[], char *[]),都是編譯器/平臺相關的擴展。

+0

「main」只有兩種_canonical_形式,第二種也有文本「或等效」(所以'char **'沒問題)。另外,該標準還允許其他人 - 它只是不強制他們。 – paxdiablo

+0

@paxdiablo:我決定不打擾等同形式,因爲它們已經被標準中的其他規則處理過了。感謝您的其他評論,在答案中添加了「必填」。 –

+0

這隻能回答它在託管系統上的工作原理。要獲得完整的答案,請查看此鏈接:http://stackoverflow.com/questions/5296163/why-is-the-type-of-the-main-function-in-c-and-c-left-to-the-用戶到定義/ 5296593#5296593 – Lundin

相關問題