2010-12-07 63 views
2

我在這裏有點頭痛......我已經開始深入研究GCC G ++,並試圖拋出警告/錯誤,如果函數拋出異常中未定義的異常 - 規範或反之亦然(你知道,像java)。GCC comp_except_specs和異常處理/解析

我覺得我已經走進充滿着走在樹的所有不同類型的任意宏一個全新的星球,吐出出來,我不知道如何與他們交互...

我找到了comp_except_specs它比較兩個異常類型並返回它們是否相等;但是,只傳遞從build_throw返回的異常和從返回的樹cp_parser_exception_specification_opt會導致內部編譯器錯誤。

如果你有任何關注,那麼你可能比我有更多的知識。我不是在尋找「答案」,雖然那會很好,但任何有關這方面的信息都將非常感激!

編輯: 我的目標是改變編譯器(不知道爲什麼我當時沒有提及...)以合併Java風格的異常規範錯誤。我最終確實想出了一個實現它的好方法 - 以爲我不記得它是如何的,現在已經過了很久了。

回答

3

我不想讓你失望,但是據我所知,在C++中Java類似的異常檢查是不可能的,甚至不能作爲GCC特定的擴展。

這是一個疏忽,這是由於例外情況在很晚的階段就被甩到了語言上,而沒有經過適當的考慮。更糟糕的是,看起來相似,但做了一些完全不同的東西,通常會產生相反的效果,並以異常規範的形式添加。

鑑於失敗及其影響, Java類檢查所需的語法,以及C++社區中常見的異常失敗和疲勞感,我們可能無法在C++中獲得適當的異常檢查。

0

編輯我不確定你真正要問什麼,除了指出g ++的源代碼是複雜的。

老回答以下(其不具有太多的實際問題呢,現在看來,但萬一有人網上搜尋起來有那麼一天,發現它有用我會離開它)

由於另一個答案是,C++沒有Java風格的檢查異常[1]。實際上,C++標準的下一次迭代C++ 11(之前的C++ 0x)已不贊成使用異常規範,而是增加了一個「noexcept」關鍵字來代替舊的「throw()」。見例如

http://www.gotw.ca/publications/mill22.htm

"noexcept" vs "Throws: nothing"

http://www.boost.org/development/requirements.html#Exception-specification

[1]當然,還有人誰使用Java和不喜歡的檢查異常,以及一些框架(春季IIRC?)包裝標準異常在未經檢查的情況下(從RuntimeException繼承)。

0

請在你的問題中更具體一些,這太寬泛了。

異常規範在C++中幾乎沒有用處。編譯器不檢查它。我聽說過有關靜態分析工具。但是我還沒有遇到過。

真是太遺憾了,與未定義或可疑行爲相比,異常是處理錯誤的最佳方式。這只是C++錯誤的一件事,C++ 0x只會加劇它。

而我相信G ++的黑客行爲已經超出了本網站的範圍。 GCC/G ++郵件列表對此更合適。