【问题标题】:where does main() return its value?main() 在哪里返回它的值?
【发布时间】:2010-04-14 13:25:15
【问题描述】:

我最近在使用 CODE::BLOCKS+mingw 编译器 如果我没有在程序末尾键入 return 0,我可以看到 main() 返回了一些整数,我了解到 main() 返回 0 推断程序执行成功。我没有发现我的代码有任何缺陷,为什么它返回一些整数?

其次 任何函数都将其值返回给其函数调用,main() 将其值返回到哪里?

【问题讨论】:

    标签: c++ c


    【解决方案1】:

    C++ 标准规定,如果您没有显式返回值,编译器必须生成代码,就像您输入了一样:

    return 0;
    

    返回值的确切含义以及返回方式是特定于实现的。对于大多数操作系统,返回值成为进程的退出代码。

    【讨论】:

    • 这仅适用于 C++;没有明确定义为所使用的语言。
    • @Williham 问题被标记为“C++”
    • 它也被标记为“C”。既然出现了这个问题,他显然无论如何都没有使用 C++ 编译器。 (至少不是一个合规的。)
    • @Williham:n1256中有类似的语言:" 5.1.2.2.3 程序终止 1 如果main函数的返回类型是与int兼容的类型,a从主函数的初始调用返回等效于以主函数返回的值作为其参数调用退出函数;10) 到达终止主函数的}返回值0 . 如果返回类型与 int 不兼容,则返回宿主环境的终止状态未指定。添加了重点。
    • 这仍然意味着 minGW 并没有完全跟上这一点,无论语言如何。
    【解决方案2】:

    main() 将其值返回给系统。然后系统可以将其用作错误或成功代码。在 Linux 中,您可以这样做:

     $ yourprog && someotherprog
    

    它会运行你的程序,然后运行其他程序,当且仅当你的程序返回 0。

    在 Windows 中,您可以在批处理脚本中使用 if errorlevel 习惯用法来检查程序的返回值。

    此外,如果您从另一个进程(使用 fork()CreateProcess() 或其他东西)启动一个进程,您可以稍后检索其退出状态并采取相应措施。

    【讨论】:

      【解决方案3】:

      main() 将其值返回给系统(虽然是间接的,我们目前不讨论这一点)。

      当控制到达带有返回值的函数的末尾时(例如,main();将返回的是寄存器中已经注定要保存返回值的任何内容(这有时是最后一个陈述,有时不是)。

      当然,道德是你应该始终以 return 0 结束你的 main;

      【讨论】:

        【解决方案4】:

        main() 将它的值返回给加载器(系统)。 它表明程序是否成功执行。 返回(0);表示成功,因为 SUCCESS IS UNDEFINED :D !!!

        【讨论】:

        • EXIT_SUCCESSstdlib.h 中定义。
        猜你喜欢
        • 2014-10-15
        • 2012-07-16
        • 2013-08-21
        • 2018-11-09
        • 2012-08-04
        • 1970-01-01
        • 1970-01-01
        • 2023-04-01
        相关资源
        最近更新 更多