我在linux上使用gcc編譯C++代碼。 有一些不應該被處理的例外,應該關閉程序。 然而,我想能夠顯示異常字符串:C++運行時,顯示異常消息
例如:
throw std::runtime_error(" message");
不顯示消息,只有類型的錯誤。 我想顯示消息。 有辦法做到這一點嗎?
這是一個圖書館,我真的不想把catch語句,讓圖書館用戶決定。 但是,現在庫用戶是fortran,它不允許處理異常。 原則上,我可以把處理器在包裝代碼,而不是是否有辦法解決
我在linux上使用gcc編譯C++代碼。 有一些不應該被處理的例外,應該關閉程序。 然而,我想能夠顯示異常字符串:C++運行時,顯示異常消息
例如:
throw std::runtime_error(" message");
不顯示消息,只有類型的錯誤。 我想顯示消息。 有辦法做到這一點嗎?
這是一個圖書館,我真的不想把catch語句,讓圖書館用戶決定。 但是,現在庫用戶是fortran,它不允許處理異常。 原則上,我可以把處理器在包裝代碼,而不是是否有辦法解決
標準的異常都有一個虛擬what()
方法,讓你與異常關聯的消息:
int main() {
try {
// your stuff
}
catch(const std::exception & ex) {
cerr << ex.what() << endl;
}
}
你可以在主寫:
try{
}catch(const std::exception &e){
std::cerr << e.what() << std::endl;
throw;
}
我提出了一些澄清。 原則上,如果沒有辦法解決這個問題,我可以使用類似的方法 – Anycorn 2010-04-26 17:19:12
並注意,這有一個缺點,就是吹掉g ++通常會保留在覈心文件中的未捕獲異常的callstack。 – 2010-04-26 17:57:01
你可以使用try/catch
塊throw;
聲明,讓用戶庫處理異常。 throw;
語句將控制傳遞給另一個處理程序以執行相同的異常。
好吧,我想我會嘗試用fortran/c包裝中的消息打印並拋出。那麼我會讓C++接口自己處理異常 – Anycorn 2010-04-26 17:26:48
我建議爲fortran調用者的庫製作一個適配器。把你的try/catch放入適配器。從本質上講,如果您希望從Fortran(或C)調用它,但仍允許異常提供給C++調用方,那麼您的庫需要多個入口點。這種方式還具有將C++鏈接提供給C++調用者的優點。只有擁有一個fortran接口才會限制你的工作,因爲一切都必須通過引用傳遞,你需要考慮char *參數的隱藏參數等。
'throw std :: runtime_error(「message」);'現在顯示消息在g ++ 6.2.0,Ubuntu 16.10上。 – 2017-02-19 22:40:12