2013-11-26 40 views
7

我正在用C++连接一个C程序(main()用C语言)。在我的代码中的某些点上,我想停止执行该程序。现在我想知道,我该如何干净地做到这一点?如何用混合C/C++干净地退出程序

目前我打电话给std::terminate(),但更多的是缺乏更好的想法。错误的主要原因是我没有释放内存(因为它在程序终止时无论如何都是释放的,对吧?)但是MSVS即时调试器弹出,我得到一个丑陋的错误消息以不寻常的方式终止运行时。

编辑:由于这造成了混淆:从main()return 0返回在这种情况下是不可能的。

+6

'exit(0)'有什么问题? –

+2

AFAIK std :: terminate用于指示异常终止(例如,当未捕获的异常达到顶级时)。这可能会触发调试器。 – wintermute

+1

干净的方法是正确处理控制流并以标准方式退出(释放句柄,对象,加入线程等)。 'exit(0)'是一个丑陋的选择 – Bruce

回答

7

如果你关切清理和调用destuctors然后

exit(EXIT_SUCCESS); // or EXIT_FAILURE 

exitterminateabort之间的最佳选择。

  • 功能exit调用descructors和清理自动存储对象(其在全球范围内声明的对象)。它还调用传递给atexit的函数。

  • 功能abort对于异常出口很有用,并且不会清理任何东西。它不会调用传递给atexit的函数。

  • 函数terminate在C中不存在。当你有异常并且你不能处理它但完成程序时它很有用。

+1

exit不调用所有析构函数 – user1233963

+2

@ user1233963:[_“具有静态存储持续时间的对象的析构函数按其构造函数完成或其动态初始化完成的相反顺序调用(http://en.cppreference.com/w/cpp/utility/program/exit) – deepmax

+1

@M M. http://ideone.com/UHg9dk – user1233963

3

main功能是它开始的地方,main功能是它通常应该结束的地方。如果您使用return 0;它表示成功退出。

int main(void) { 
    //init 
    //do stuff 
    //deinit 
    return 0; // bye bye 
} 

你也可以使用exit(0);,但如果你的出口点分散各地的地方它使事情更难调试。

+0

不幸的是,我不能让'main()'返回0.使用exit(0)工作,虽然。一直认为这是一种C-ISH方式来结束节目。 – fewu

+0

@fewu确保你的'main'的返回类型是'int'。 – user694733

相关问题