退出(0)与返回 0

Posted

技术标签:

【中文标题】退出(0)与返回 0【英文标题】:exit(0) vs return 0 【发布时间】:2013-04-03 11:03:24 【问题描述】:

当 exit(0) 用于退出程序时,本地的析构函数 范围内的非静态对象不被调用。但是析构函数是 如果使用 return 0 则调用。注意静态对象​​将是 即使我们调用 exit() 也会清理干净。

这个逻辑背后应该有一些原因。我只是想知道它是什么?谢谢。

【问题讨论】:

这与上面引用的问题完全不同。他显然很熟悉所引用问题的答案(exit 不调用本地析构函数。他在问为什么。 @JamesKanze 好的。我们在这方面有点太快了。投票重新提出问题,删除了反对票。 即使链接到问题中接受的答案给出了原因的提示(“exit() 不返回”),我同意它肯定不是重复的。这是一个完全不同的问题。 【参考方案1】:

对于exit( 0 ),您正在调用一个函数。你 不要期望调用局部变量的析构函数 if 你正在调用一个函数。编译器不知道, 先验,exit( 0 ) 有什么特别之处。

事实上,这个原理实际上只适用于之前的 C++ 例外。该标准可以重新定义exit() 来抛出一个 实现用参数定义异常,并指定 对main 的调用被包装在一个try 块中,该块捕获 此异常,并将返回代码传递回系统。 这意味着exit 有一个完全不同的 然而,C 和 C++ 中的语义;无论如何,没有 提交委员会的提案以进行此更改。

【讨论】:

以上是关于退出(0)与返回 0的主要内容,如果未能解决你的问题,请参考以下文章

程序代码中退出函数exit()与返回函数return ()的区别

3分钟带你熟悉进程的等待与替换!!!

3分钟带你熟悉进程的等待与替换!!!

3分钟带你熟悉进程的等待与替换!!!

3分钟带你熟悉进程的等待与替换!!!

即使命令失败,退出状态也会返回“0”