为什么C和c ++中的主要函数的类型留给用户去定义?

这个问题在这里已经有了答案:

  • main()应该在C和C ++中返回什么? 19个答案

  • 编辑这个答案并不完整,因为它没有真正解决奇怪的句子“或以某种实现定义的方式”。 我现在写了一个更完整的答案,这也解决了C90,C11和C ++。 编辑结束

    这是C标准所说的(ISO C 9899:1999):

    5.1.2.1独立环境

    在一个独立的环境中(C程序的执行可能没有任何操作系统的好处),程序启动时调用的函数的名称和类型是实现定义的。 / .. /独立环境中程序终止的影响是由实现定义的。

    5.1.2.2托管环境

    托管环境不需要提供,但应符合以下规范(如果存在)。

    5.1.2.2.1程序启动

    程序启动时调用的函数名为main。 该实现没有声明这个函数的原型。 它应该用返回类型int和不带参数来定义:

    int main(void){/ * ... * /}

    或者带有两个参数(这里称为argc和argv,尽管可以使用任何名称,因为它们是声明它们的函数的本地):

    int main(int argc,char * argv []){/ * ... * /}

    C ++标准中的文本或多或少是相同的。 请注意,文本中的“程序启动”是托管环境的子条款。

    意即:

  • 如果您的程序运行在无主机环境中(您的程序是嵌入式系统或操作系统),它可能有任何返回类型。 void main()是最常见的。

  • 如果程序运行在托管环境中(在OS之上),main()必须返回int,并且可能有其他参数。


  • Lundin对C来说是正确的,但是在C ++中,措辞足够独特以产生影响:

    [C++11: 3.6.1/1]:程序应包含一个名为main的全局函数,它是程序的指定开始。 它是实现定义是否需要在独立环境中的程序来定义main功能。

    [C++11: 3.6.1/2]:实现不应该预定义main函数。 该功能不得超载。 它应该有一个类型为int的返回类型 ,否则它的类型是实现定义的[..]

    第一个加粗的通道不会覆盖或取消第二个。

    main在C ++中返回int ,总是。


    main的返回类型取决于实现,而不是程序员。 检查您的编译器文档以查看合法签名的main 。 不要认为void main()就是其中之一。 在托管环境中, main通常返回int 。 在freestandaing环境中,入口点甚至可能不会被命名为main ,但其返回类型仍将由实现确定,而不是程序员。

    链接地址: http://www.djcxy.com/p/28733.html

    上一篇: Why is the type of the main function in C and c++ left to the user to define?

    下一篇: Must the int main() function return a value in all compilers?