Jam*_*lis 26
虽然您可以调用exit()(如果您的应用程序遇到一些致命错误,可能需要这样做),退出程序的最简洁方法是从main()以下位置返回:
int main()
{
// do whatever your program does
} // function returns and exits program
Run Code Online (Sandbox Code Playgroud)
当您调用时exit(),具有自动存储持续时间(本地变量)的对象在程序终止之前不会被销毁,因此您无法进行适当的清理.这些对象可能需要清理它们拥有的任何资源,保留任何挂起的状态更改,终止所有正在运行的线程,或执行其他操作以使程序干净地终止.
Ben*_*ley 21
#include <cstdlib>
...
exit( exit_code );
Run Code Online (Sandbox Code Playgroud)
有几种方法可以使程序终止.哪一个是合适的取决于您希望程序终止的原因.绝大部分时间都应该在main函数中执行return语句.如下所示.
int main()
{
f();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
正如其他人已经确定的那样,这样可以正确地破坏所有堆栈变量,从而正确地进行清理.这是非常重要的.
如果您在代码深处某处检测到错误,并且需要退出,则应抛出异常以返回main函数.如下所示.
struct stop_now_t { };
void f()
{
// ...
if (some_condition())
throw stop_now_t();
// ...
}
int main()
{
try {
f();
} catch (stop_now_t& stop) {
return 1;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这会导致堆栈展开所有要被破坏的堆栈变量.仍然非常重要.请注意,使用非零返回值指示失败是合适的.
如果在不太可能的情况下,您的程序检测到一个条件,指示执行更多语句不再安全,那么您应该使用std :: abort().这将使您的程序突然停止,无需进一步处理.std :: exit()是类似的,但可能会调用atexit处理程序,如果你的程序被充分borked可能会很糟糕.
| 归档时间: |
|
| 查看次数: |
118329 次 |
| 最近记录: |