2012-01-10 49 views
2

我想殺死我的C++程序並立即終止而不激活任何類型的析構函數,特別是靜態和全局變量,但是我想退出狀態爲0 - abort()對我不起作用。如何中止一個C++程序並退出狀態0?

有沒有人有解決方案? 謝謝

+0

爲什麼'中止()'你不工作,如果我可以問嗎? – 2012-01-10 14:15:17

+0

爲什麼你不想激活析構函數? – 2012-01-10 14:15:25

+0

「'該函數生成SIGABRT信號,默認情況下程序終止向主機環境返回不成功的終止錯誤代碼。」 – WeaselFox 2012-01-10 14:15:53

回答

8

也許_exit(0);是你在找什麼?

以下是man page的相關內容。

+0

這將激活析構函數不是嗎? – WeaselFox 2012-01-10 14:19:16

+0

試過了,作品,謝謝! – WeaselFox 2012-01-10 14:20:35

+0

在C++ 11中,這被標準化爲'std :: _ Exit'(繼承自C99)或'std :: quick_exit'。 – 2012-01-10 14:28:23

1

_Exit(0)如何從stdlib.h。 (演示:http://ideone.com/ecCgC

+0

這仍然會調用全局對象和靜態對象的析構函數。 – bitmask 2012-01-10 14:22:28

+0

@bitmask:不,它不。檢查N3290§18.5/ 3。 – kennytm 2012-01-10 14:24:20

+1

@bitmask:不在C++ 11中不會。在C++ 03中,它沒有指定,但可能仍然不會。 – 2012-01-10 14:29:28

6

從C++ 11 n3290 - §18.5:

[[noreturn]] void _Exit(int status) noexcept; 

該程序而不執行析構自動的,螺紋的對象終止,或 靜態存儲持續時間和不調用傳遞給atexit對函數( )

這實際上是在C99中定義的,儘管如此,實際上它在大量的Pre-C++ 11實現中起作用。

用途:

#include <cstdlib> 
#include <iostream> 

struct test { 
    ~test() { 
    std::cout << "Goodbye world" << std::endl; 
    } 
}; 

int main() { 
    test t; 
    _Exit(0); 
} 
+0

我認爲如果您要澄清哪些版本的C++會這樣做並且不會工作,那麼這會更有幫助。 – 2012-01-10 14:20:15

+1

@ Styne666:n3290表示C++ 11。但該功能是C99的一部分。甚至在此之前它可能會工作。 – kennytm 2012-01-10 14:25:48