我正在考虑嵌入式系统中的错误处理,特别是 C++ 中的错误处理,我想就我所理解的异常、返回代码和断言的不同用例获得一些意见。
假设我们有一个系统可以分析从传感器获得的信号并对结果进行一些计算。如果信号平坦,则说明我们超出了操作范围,无法执行算法。
返回码:平坦信号是预期的并且不是异常情况,像 FLAT_SIGNAL 这样的返回码让更高级别的代码知道不要运行算法并让用户知道我们超出了范围就足够了。这是正常程序流程的一部分。
异常:如果传感器断开连接,或者信号显示其他异常外部条件的迹象,则抛出异常。
断言:使用断言检查类的状态和/或函数参数以查找编程错误或错误。不应包含在发布代码中。
编辑:添加一些具体问题。
可以混合使用异常和返回码吗?是否应该在发布代码中关闭断言?在我描述的情况下,异常听起来是否有点矫枉过正?
最佳答案
是的,混合返回值和异常绝对没问题。对“通常不应该发生”的事情使用异常,并为仍然需要检查的事情返回值。
当然,assert
用于编程错误(例如检查指针是否不是 NULL
,检查值是否在范围内,值是否已初始化,等等).
关于c++ - 嵌入式系统中的错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31981708/