C不支持函數重載。那麼我們怎麼能有3個主要的原型? 有3個原型的歷史原因是什麼?爲什麼我們在C中有main的多個聲明?
回答
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 *[])
,都是編譯器/平臺相關的擴展。
「main」只有兩種_canonical_形式,第二種也有文本「或等效」(所以'char **'沒問題)。另外,該標準還允許其他人 - 它只是不強制他們。 – paxdiablo
@paxdiablo:我決定不打擾等同形式,因爲它們已經被標準中的其他規則處理過了。感謝您的其他評論,在答案中添加了「必填」。 –
這隻能回答它在託管系統上的工作原理。要獲得完整的答案,請查看此鏈接:http://stackoverflow.com/questions/5296163/why-is-the-type-of-the-main-function-in-c-and-c-left-to-the-用戶到定義/ 5296593#5296593 – Lundin
- 1. 爲什麼main不被聲明爲extern
- 2. 爲什麼在main中隱式聲明函數? C編程
- 3. 爲什麼要在main中重新聲明一個函數?
- 4. 爲什麼人們在C++中使用`main()`而不是`int main()`?
- 5. 爲什麼我們在java中聲明變量爲private
- 6. 爲什麼我在一個聲明中獲得多種類型?
- 7. 什麼應該是C++中int main的參數/聲明?
- 8. 同時聲明多個外鍵或單獨聲明它們有什麼區別?
- 9. 爲什麼我們需要在類內聲明一個接口?我們這樣做有什麼優勢嗎?
- 10. 爲什麼我們在派生類中使用使用聲明?
- 11. 爲什麼我們不能在togglestatus函數中聲明this.render?
- 12. 爲什麼我們要在普通類中聲明靜態類?
- 13. 爲什麼我們在字體聲明中包含TTF文件?
- 14. 在javascript中爲什麼我們使用var來聲明變量?
- 15. 爲什麼mysql.pm中的全局變量沒有被聲明爲我們的?
- 16. 在main(C++)中使用聲明
- 17. 爲什麼我們要聲明一個靜態方法
- 18. 爲什麼我們不需要在C#中聲明serialVersionUID(或等價物)?
- 19. 爲什麼C++有一個「;」在類聲明後
- 20. 爲什麼我們無法從jsp聲明中訪問請求?
- 21. 在main()之前或之後聲明函數有什麼區別?
- 22. 爲什麼我們不能在const中聲明一個映射並填充它?
- 23. 爲什麼我們要在單個文件中聲明公共類?
- 24. 爲什麼我們不能在for循環中聲明兩個變量?
- 25. 爲什麼我們在這個函數聲明中使用const和&?
- 26. 在行16,54,55,56,57,58我得到錯誤「聲明缺少;在函數main()」爲什麼?
- 27. 爲什麼將main聲明爲數組編譯?
- 28. 爲什麼人們在JavaScript中聲明爲null?
- 29. 爲什麼C++有一個額外的類名聲明?
- 30. 爲什麼我們需要的java.sql聲明*包
您的問題的答案可以在這裏找到:http://stackoverflow.com/questions/5296163/why-is-the-type-of-the-main-function-in-c-and-c-left用戶定義/ 5296593#5296593 – Lundin