2009-11-30 24 views
2

我想知道是否有一些編譯參數,最好在gcc(g ++)中將try/catch塊的缺失視爲錯誤。這是java中的標準行爲,我總是喜歡它。強制C++編譯器檢查異常處理

+2

不可以,因爲標準的設計基本上是不可能的,因爲在編譯時不可能確切知道將調用哪些函數。 – 2009-11-30 14:38:06

+1

找到主要功能。將所有內容放在try-catch塊中。沒有錯誤。 :)(我想知道如果在構造全局變量時拋出異常會發生什麼?) – UncleBens 2009-11-30 15:54:33

回答

8

由於在Java中checked異常依靠throw簽名,您可以瞭解爲什麼你會不會想在SO我們使用在C throw函數簽名++中this question

0

有一件事你可以用C++做的例外是在你的函數中使用異常規範。這並不積極防止非上市例外從該函數被拋出,但它使他們的錯誤(和他們都映射到預定義unexpected()

所以int f() throw();是C++被上調「對待任何異常函數f錯誤」

+1

值得注意的是它被「視爲_runtime_錯誤」。一個C++編譯器仍然需要編譯'void foo()throw(){throw 42; }'。 – 2009-11-30 19:58:00

1

好,使用異常規格通常是一個壞主意:http://cplusplus.co.il/2009/10/06/exception-specifications/

如果不使用這些,編譯器基本上無法知道這可能會引發異常的方式,所以沒有方式做到這一點。

你可以做什麼,是提供你自己的實現std :: terminate(通過調用std :: set_terminate())並處理未捕獲的異常。