2010-12-10 51 views
1

喜的=) 我有一點點好奇心 如果我下面的函數,即關閉程序調用sys.exit:追趕sys.exit

void stop(int state){ 
    std::exit(state); 
} 

現在,我要打電話此功能,但不退出程序。 所以,我想「抓住」std :: exit命令......有沒有一種方法可以做到這一點?

+0

「捕捉」是什麼意思?這不是一個例外。如果你想添加一些防止調用退出的代碼,你不能以某種方式包裝它嗎? – x13n 2010-12-10 10:31:03

回答

0

做同樣與尾遞歸:有問題的函數調用總是在執行路徑的最後一條語句,或者根本不發生:

void stop(int state) 
{ 
    const bool exitReally = DecideWhetherToExit(); 
    if (exitReally) 
    std::exit(state); 
} 

此功能不會做任何後調用std::exit,但也可能根本不會調用它,例如,在對另一個函數中的任何內容進行評估後決定。

1

你不能這樣做,因爲exit保證永不返回。因此,編譯器可以利用此優勢並生成exit之後沒有任何執行路徑的代碼。如果exit返回一些hackery,你會得到未定義的行爲。所以這沒有標準的方法。

0

據我所知,你不能調用exit,然後進一步阻止應用程序終止。

你不能只傳遞另一個參數到stop,以便它不會調用exit

E.g.

 
void stop(int state, bool exit) 
{ 
    if(exit) 
     std::exit(state); 
}