2010-12-07 64 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 ++邮件列表对此更合适。