2013-11-26 57 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

相關問題