exit(0)vs return 0

时间:2013-04-11 09:46:36

标签: c++ return destructor exit

  

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

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

1 个答案:

答案 0 :(得分:8)

exit( 0 )的情况下,您正在调用一个函数。您 不要指望调用局部变量的析构函数 你正在调用一个函数。并且编译器不知道, 先验,exit( 0 )有任何特殊之处。

实际上,这个基本原理实际上只适用于C ++ 例外。该标准可以重新定义exit()以抛出一个 用参数实现定义的异常,并指定 对main的调用包含在一个捕获的try块中 此异常,并将返回代码传递回系统。 这意味着exit完全不同 但是,C和C ++中的语义;无论如何,一直没有 委员会提出改变的建议。