程序可以用各種不同的狀態碼退出。
我想綁定一個退出處理程序作爲基於此狀態代碼處理最終任務的所有方式。
是否可以在退出處理程序中分配狀態代碼?
據我所知,No。爲什麼沒有std :: on_exit?
因此,我無法獲得狀態值,如在這個小例子:
#include <iostream>
#include <cstdlib>
int Get_Return_Code(){
//can this be implemented?
return 0;
}
void Exit_Handler() {
// how do I get the return code
// from within the exit heandler?
auto return_code = Get_Return_Code(); //?
// I'd like to make decisions based on the return code
// while inside my exit handler
if (return_code == EXIT_SUCCESS){
std::cout << "perform exit successful tasks...\n";
}
else {
std::cout << "perform exit failure tasks...\n";
}
}
int main(int argc, char** argv)
{
//bind the exit handler routine
if (std::atexit(Exit_Handler)){
std::cerr << "Registration failed\n";
return EXIT_FAILURE;
}
//if an argument is passed, exit with success
//if no argument is passed, exit with failure
if (argc > 1){
std::cout << "exiting with success\n";
return EXIT_SUCCESS;
}
std::cout << "exiting with failure\n";
return EXIT_FAILURE;
}
是否有一個原因,C++還不包括on_exit?
我很擔心Windows世界中的交叉兼容性。
關於代碼庫:
我這樣做的目標,不涉及內存管理。我們有一個現有的代碼庫。到處都有退出聲明。當程序退出時出現錯誤,我想顯示錯誤代碼對用戶意味着什麼。在我看來,這是沒有重大重構的最快解決方案。
因爲不需要?只需將代碼包裝在try/catch/finally塊中,你現在可以做同樣的事情。當語言沒有異常處理時,需要退出處理程序 –
您可以自己實現'exit()',覆蓋標準庫的版本,並在完成任何想要的操作後調用'_exit()'數字代碼。我不確定這是一個好主意,但如果你真的需要,它可能是一種獲得你想要的東西的方法。 –
@PanagiotisKanavos只需'try-catch',C++中不需要'finally'。 – juanchopanza