exit(0) vs return 0
When exit(0) is used to exit from program, destructors for locally
scoped non-static objects are not called. But destructors are
called if return 0 is used.Note that static objects will be
cleaned up even if we call exit().
这种逻辑背后应该有某种原因。我只想知道是什么?谢谢您。
- 这和上面提到的问题完全不同。他显然对所引用问题的答案很熟悉(exit不叫局部析构函数。他在问为什么。
- @Jameskanze好。我们在这方面做得有点太快了。投票重新开始问题,取消投反对票。
- 尽管"链接到问题"中接受的答案给出了原因的提示("exit()不返回"),但我同意它肯定不是重复的。这是一个完全不同的问题。
对于exit( 0 ),您正在调用一个函数。你不要期望调用局部变量的析构函数,如果您正在调用函数。编译器不知道,一个先验的事实是,exit( 0 )有什么特别之处。
事实上,这个原理只适用于C++。例外情况。该标准可以重新定义exit(),以便实现用参数定义了异常,并指定对main的调用被包装在一个try块中,该块捕获此异常,并将返回代码传递回系统。这意味着exit有完全不同的然而,C语言和C++语言中的语义学是不存在的。向委员会提出的做出这一改变的建议。