2011-09-27 110 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

相关问题