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