喜的=) 我有一點點好奇心 如果我下面的函數,即關閉程序調用sys.exit:追趕sys.exit
void stop(int state){
std::exit(state);
}
現在,我要打電話此功能,但不退出程序。 所以,我想「抓住」std :: exit命令......有沒有一種方法可以做到這一點?
喜的=) 我有一點點好奇心 如果我下面的函數,即關閉程序調用sys.exit:追趕sys.exit
void stop(int state){
std::exit(state);
}
現在,我要打電話此功能,但不退出程序。 所以,我想「抓住」std :: exit命令......有沒有一種方法可以做到這一點?
做同樣與尾遞歸:有問題的函數調用總是在執行路徑的最後一條語句,或者根本不發生:
void stop(int state)
{
const bool exitReally = DecideWhetherToExit();
if (exitReally)
std::exit(state);
}
此功能不會做任何後調用std::exit
,但也可能根本不會調用它,例如,在對另一個函數中的任何內容進行評估後決定。
你不能這樣做,因爲exit
保證永不返回。因此,編譯器可以利用此優勢並生成exit
之後沒有任何執行路徑的代碼。如果exit
返回一些hackery,你會得到未定義的行爲。所以這沒有標準的方法。
據我所知,你不能調用exit
,然後進一步阻止應用程序終止。
你不能只傳遞另一個參數到stop
,以便它不會調用exit
?
E.g.
void stop(int state, bool exit) { if(exit) std::exit(state); }
「捕捉」是什麼意思?這不是一個例外。如果你想添加一些防止調用退出的代碼,你不能以某種方式包裝它嗎? – x13n 2010-12-10 10:31:03