2009-11-30 22 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())并处理未捕获的异常。