加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

有没有一个普遍接受的成语,指示C代码可以抛出异常?

发布时间:2020-12-16 05:31:14 所属栏目:百科 来源:网络整理
导读:使用C代码时,遇到问题,意外的是调用者抛出异常.读取您正在使用的模块的每一行,看看它是否抛出异常并不总是可行或不切实际的,如果是,则是什么类型的异常. 是否存在处理这个问题的惯用语或“最佳做法”? 我想到了以下几点: (1)在我们的doxygen文档中,我们可
使用C代码时,遇到问题,意外的是调用者抛出异常.读取您正在使用的模块的每一行,看看它是否抛出异常并不总是可行或不切实际的,如果是,则是什么类型的异常.

是否存在处理这个问题的惯用语或“最佳做法”?

我想到了以下几点:

(1)在我们的doxygen文档中,我们可以在预期抛出异常的每个函数中添加一个注释,它的类型是.
简单:简单.
Minuses:取决于用户错误.

(2)为了安全起见,我们可以有一个app-wide try / catch(…)
Pluses:我们不会有任何未被捕获的例外.
罚款:这个例外是远离投篮.很难弄清楚做什么或出了什么问题.

(3)使用异常规格
Pluses:这是处理这个问题的语言认可方式.
Minuses:需要重新构建问题库才能有效.在编译时不执行,所以违规行为会变成运行时问题,这是我想避免的!

这些方法的任何经验,还是我不知道的任何其他方法?

解决方法

解决问题的惯用方式不是表示您的代码可以抛出异常,而是在对象中实现异常安全.该标准定义了对象应实现的几个异常保护:

>抛出保证:该函数不会抛出异常
>强异常安全保证:如果抛出异常,对象将处于初始状态.
>基本异常安全保证:如果抛出异常,该对象将处于有效状态.

当然,这个标准文件也是每个标准库类的异常安全级别.

这是处理C中异常的方法.而不是标记哪个代码可以或不能抛出异常,使用RAII来确保您的对象被清理,并考虑在RAII对象中实现适当级别的异常安全性,以便在没有特殊处理的情况下能够生存抛出异常.

如果异常允许您的对象处于无效状态,则异常只会造成问题.这绝对不会发生.您的对象应始终至少实现基本保证. (并实施提供适当级别的异常安全的容器类是启发性的C练习))

对于文档,当你能够确定一个函数可能抛出的异常时,一切都可以自由地记录它.但一般来说,当没有指定任何其他内容时,假设函数可能会抛出.有时候,空掷指定有时用于记录函数从不抛出的时间.如果不在那里,假设该函数可能会抛出.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读