【问题标题】:Who receives the value 0 when we write return 0 [duplicate]当我们写return 0时谁收到值0 [重复]
【发布时间】:2013-12-29 10:36:57
【问题描述】:
int main()
{
    return 0;
}

谁在执行 main 函数后收到值 0?之后这个值有什么用?

【问题讨论】:

    标签: c++ return-value main


    【解决方案1】:

    执行一个程序的效果和单次调用是一样的:

    std::exit(main(/* args */))
    

    所以main 的返回值是exit 的单个参数,无论这对您的系统意味着什么。

    注意标准只定义了两个返回值,EXIT_SUCCESSEXIT_FAILURE。返回零等效于返回EXIT_SUCCESS。其他一切都由实现定义。

    【讨论】:

      【解决方案2】:

      在 Unix(类)系统上,您可以向 shell 发出退出状态信号(假设 bash):

      $ ./your-program
      $ echo $?
      0
      

      bash中,$?是上一条命令的退出码。

      【讨论】:

        【解决方案3】:

        main() 函数返回一个值等同于使用该值调用exit()。所以你的代码类似于:

        int main() {
            std::exit(0);
        }
        

        退出状态返回给运行时库。它可以被调用程序的父进程访问;在 Unix 上,这是使用 wait() 系列调用完成的。如果您从 Unix shell 运行程序,退出状态将放在变量 $? 中,或者您可以使用 ifwhile 等控制语句对其进行测试。

        【讨论】:

          【解决方案4】:

          操作系统可能会使用这个值。在大多数操作系统中,您可以在程序运行后查询此值。如何执行此操作取决于操作系统。

          【讨论】:

            【解决方案5】:

            main 的返回值被传递给调用你的程序的进程。

            【讨论】:

              【解决方案6】:

              调用你的程序的程序。在上述情况下,它是 OS shell 或执行程序的批处理文件/脚本。

              【讨论】:

                【解决方案7】:

                返回值作为参数status 传递给status,然后它会进行一些整理并将退出状态返回给宿主环境:

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

                【讨论】:

                  【解决方案8】:

                  考虑一个执行子程序的程序。很多时候这将是一个外壳/终端/控制台。当一个孩子退出时,它可以告诉它的父母它已经完成以及它是否成功。

                  考虑更改目录的程序cd 和删除一些文件的rm。如果您要编写一个 cd 到一个目录的程序,然后删除所有带有 rm * 的文件,那么 shell/console/terminal 能够判断 cd 命令是否成功非常重要,否则内容可以删除当前目录。

                  shell 调用例如cd 命令上的waitpid 并检查返回的值。基于该返回值,shellscript 程序员可以决定调用rm 或进行一些错误处理。

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 2014-03-31
                    • 2017-10-27
                    • 2011-07-05
                    • 2020-10-13
                    • 1970-01-01
                    • 2012-03-27
                    • 2018-01-22
                    • 1970-01-01
                    相关资源
                    最近更新 更多