int main()
{
return 0;
}
执行main函数后谁收到值0?那之后用的是什么值?
答案 0 :(得分:2)
执行程序的效果与单次调用相同:
std::exit(main(/* args */))
因此,main
的返回值是exit
的单个参数,无论这对您的系统意味着什么。
请注意,标准仅定义了两个返回值,EXIT_SUCCESS
和EXIT_FAILURE
。返回零相当于返回EXIT_SUCCESS
。其他所有内容都是实现定义的。
答案 1 :(得分:2)
在Unix(类似)系统上,您可以向shell发出退出状态信号(assumnig bash
):
$ ./your-program
$ echo $?
0
在bash
中,$?
是上一个命令的退出代码。
答案 2 :(得分:1)
操作系统可能会使用此值。在大多数操作系统中,您可以在程序运行后查询此值。如何执行此操作取决于操作系统。
答案 3 :(得分:1)
main的返回值传递给调用程序的进程。
答案 4 :(得分:1)
调用程序的程序。在上面的例子中,它是OS shell或执行程序的批处理文件/脚本。
答案 5 :(得分:1)
从main()
函数返回值等同于使用该值调用exit()
。所以你的代码类似于:
int main() {
std::exit(0);
}
退出状态将返回到运行时库。它可以由调用该程序的父进程访问;在Unix上,这是使用wait()
系列调用完成的。如果从Unix shell运行程序,退出状态将放在变量$?
中,或者您可以使用if
或while
等控制语句对其进行测试。
答案 6 :(得分:1)
返回值作为参数std::exit
传递给status
,然后进行整理并将退出状态返回给主机环境:
最后,控制权返回给主机环境。如果status为零或EXIT_SUCCESS,则为 返回状态成功终止的实现定义形式。如果status为EXIT_FAILURE,则返回状态为不成功终止的实现定义形式。否则返回的状态是实现定义的。
答案 7 :(得分:0)
考虑执行子程序的程序。很多时候这将是一个shell /终端/控制台。当一个孩子退出时,它可以告诉它的父母它已经完成以及它是否成功。
考虑更改目录的程序cd
和删除某些文件的rm
。如果你要编写一个cd到一个目录的程序,然后用rm *
删除所有文件,那么shell / console / terminal能够判断cd
命令是否成功是非常重要的,因为否则可以删除当前目录的内容。
shell调用例如cd命令上的waitpid
并检查返回的值。基于该返回值,shellcript程序员可以调用rm
或进行一些错误处理。