main()函数的返回类型

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

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

  • C标准(ISO / IEC 9899:2011)说:

    5.1.2.2.1程序启动

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

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

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

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

    或等同物; 10)或以某种其他实施方式定义的方式。

    10)因此, int可以被定义为int的typedef名称替代,或者argv的类型可以被写为char **argv ,依此类推。

    因此, main()的唯一便携式声明具有返回类型int 。 如果MSVC定义允许使用void ('或以某种其他实现定义的方式'),那就这样做,但不要期望代码是可移植的。 旧版本的Microsoft编译器(直至并包括MSVC 2005)不允许void main() :请参见main文档:程序启动和main函数和程序执行。 但是,MSVC 2008和更高版本被记录为允许void main() :请参阅main :程序启动。 main()的三个参数形式在附录J中被标注为一个通用扩展:

    J.5通用扩展

    以下扩展在许多系统中广泛使用,但不适用于所有实现。 包含任何可能导致严格符合程序无效的扩展会导致实现不合格。 这种扩展的例子是新的关键字,在标准头文件中声明的额外的库函数,或者名称不以下划线开头的预定义宏。

    J.5.1环境参数

    在托管环境中, main函数接收第三个参数char *envp[] ,该参数指向以char为空的终止指针数组,每个指向一个字符串,该字符串提供有关执行计划(5.1.2.2.1)。


    main()返回的值以实现定义的方式传输到“环境”。

    5.1.2.2.3程序终止

    1如果main函数的返回类型是与int兼容的类型,则从初始调用返回到main函数相当于使用main函数返回的值作为参数来调用exit函数; 11)到达}终止main函数返回值0.如果返回类型与int不兼容,则返回到主机环境的终止状态未指定。

    11)根据6.2.4,在main声明自动存储时间的物体的寿命将在前一种情况下结束,即使在后一种情况下它们不存在的情况下。

    请注意, 0被强制为“成功”。 如果您愿意,您可以使用<stdlib.h> EXIT_FAILUREEXIT_SUCCESS ,但是0已经很好建立,所以是1.另请参阅退出代码大于255 - 可能吗?

    7.22.4.4 exit功能

    ¶5最后,控制权返回到主机环境。 如果status值为零或EXIT_SUCCESS ,则返回状态成功终止的实现定义形式。 如果status值为EXIT_FAILURE ,则返回状态不成功终止的实现定义形式。 否则,返回的状态是实现定义的。


    根据c标准, main()应该返回整数以通知成功或失败。一般情况下,成功返回零,失败则返回整数值(正数或负数)。 一般main被声明为

     int main(void); 
    

    所以它期望整数作为返回类型。

    如果有命令行参数,

    int main(int argc,char *argv[]);
    

    void main()是非标准的C, int main()是标准的。

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

    上一篇: The return type of main() function

    下一篇: What are the valid signatures for C's main() function?