如何干净地退出混合C / C ++的程序

时间:2013-11-26 07:14:49

标签: c++ c

我正在使用C ++连接C程序(main()在C中)。在我的代码中的某些点我想停止执行程序。现在我想知道,我怎么能干净利落地做到这一点?

目前我打电话给std::terminate(),但更多的是缺乏更好的想法。让我烦恼的主要问题是,即使我没有释放内存(因为它在程序终止时也被释放了,对吧?)但是MSVS即时调试器会弹出,我收到一个丑陋的错误消息以不寻常的方式终止运行时。

编辑:因为这引起了混淆:在这种情况下,无法从main()返回return 0

2 个答案:

答案 0 :(得分:7)

如果您担心清理和调用destuctors,那么

exit(EXIT_SUCCESS); // or EXIT_FAILURE

exitterminateabort之间的最佳选择。

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

  • 函数abort对异常退出很有用,不会清理任何内容。它不会调用传递给atexit的函数。

  • C中不存在函数terminate。当您遇到异常并且无法处理它但完成程序时,它非常有用。

答案 1 :(得分:3)

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

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

您也可以使用exit(0);,但如果您的退出点遍布整个地方,则会使调试变得更加困难。