首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C++/GCC:如何在编译时检测未处理异常

C++/GCC:如何在编译时检测未处理异常
EN

Stack Overflow用户
提问于 2014-09-29 07:36:48
回答 4查看 2K关注 0票数 3

简介: Java中的,如果没有捕获异常,您的代码甚至不会编译,编译器会在未处理的异常上崩溃。

问题:在这种情况下,有没有办法告诉GCC“严格”,并对未处理的异常提出错误或至少警告?

如果没有--是否有IDE(请用于Unix )可以突出显示这种情况作为警告?

EN

回答 4

Stack Overflow用户

发布于 2014-09-29 07:56:06

这在C++中是不可能的。异常规范是函数声明的一部分,而不是其类型的一部分。任何间接调用(通过指针或虚拟调用)都会完全删除有关异常的任何信息。

无论如何,在C++11中,都不推荐使用异常规范来支持noexcept,因此不太可能有任何编译器费心地增强这种语言特性。

票数 2
EN

Stack Overflow用户

发布于 2014-09-29 07:40:50

C++函数的唯一保证是它从不抛出异常:

代码语言:javascript
运行
复制
void f() noexcept;

但是,当抛出异常时,这将在运行时终止程序。它没有在编译时被验证。

如果要确保错误得到处理,可以得到的最接近的值是返回一个类型的值,该类型用一个成员函数包装boost::variant<OK, Error>,该成员函数接受两个回调:一个回调用于OK大小写,一个用于Error大小写。

票数 0
EN

Stack Overflow用户

发布于 2014-09-29 08:02:52

您可以随时使用:

代码语言:javascript
运行
复制
int main()
{
   try {
      ... your usual main ... 
   }
   catch(...)
   {
       std::cerr << "Unhandled exception caught" << std::endl;
   }
}

然而,这是一个相当糟糕的解决办法。

不幸的是,C++的特性使我们很难捕捉到某些东西抛出异常而无法处理的情况,因为几乎所有的东西都有抛出异常的可能性。我只能想到代码评审--也许代码分析工具,比如围绕嘎吱声构建的工具,将具有这样的能力,但它可能不会100%准确。事实上,我甚至不确定Clang目前是否完全理解抛出/尝试/捕捉,因为它似乎没有捕捉到一些相当基本的错误,checkers.html (请参阅“异常”标题)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26094739

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档