C语言异常处理 (c语言异常处理机制)
本文目录导航:
C语言异常处理
bad_alloc:new分配失败bad_cast:dynamic_cast失败bad_typeid:typeif参数为空logic_error:逻辑错误ios_base::failure:IO错误runtime_error:运行时错误bad_exception:未知错误赋值不成功可以用runtime_error,你也可以自己继承一个异常类过来,自定义异常信息

异常处理的概述
异常处理,是编程语言或计算机硬件里的一种机制,用于处理软件或信息系统中出现的异常状况(即超出程序正常执行流程的某些特殊条件)。
各种编程语言在处理异常方面具有非常显著的不同点(错误检测与异常处理区别在于:错误检测是在正常的程序流中,处理不可预见问题的代码,例如一个调用操作未能成功结束)。
某些编程语言有这样的函数:当输入存在非法数据时不能被安全地调用,或者返回值不能与异常进行有效的区别。
例如,C语言中的atoi函数(ASCII串到整数的转换)在输入非法时可以返回0。
在这种情况下编程者需要另外进行错误检测(可能通过某些辅助全局变量如C的errno),或进行输入检验(如通过正则表达式),或者共同使用这两种方法。
通过异常处理,我们可以对用户在程序中的非法输入进行控制和提示,以防程序崩溃。
从进程的视角,硬件中断相当于可恢复异常,虽然中断一般与程序流本身无关。
从子程序编程者的视角,异常是很有用的一种机制,用于通知外界该子程序不能正常执行。
如输入的数据无效(例如除数是0),或所需资源不可用(例如文件丢失)。
如果系统没有异常机制,则编程者需要用返回值来标示发生了哪些错误。
嵌入式C编程中错误异常该如何统一处理?
本文总结了嵌入式系统C语言编程中错误处理的主要方式。
错误处理涉及程序运行时可能出现的意外或异常情况的处理。
根据严重性和交互性,错误被分为致命性和非致命性、用户错误和内部错误。
合理的选择和实现错误恢复策略可以提升程序的健壮性。
错误处理的步骤包括识别错误、确定恢复策略、执行恢复操作、验证恢复成功、并记录错误信息。
处理步骤通常使用C语言代码实现。
错误传递方面,采用返回值和回传参数的方法,其中返回值方式简便高效,但存在返回值可能被忽略、错误处理代码和正常流程代码混杂、错误信息无法详细获取等问题。
回传参数通过结构体指针返回多个值,携带更多信息。
综合两者优点,可对不同类别的函数采用不同策略。
全局状态标志(如errno)用于标记错误,但存在重用和覆盖风险,且隐含要求调用者检查错误状态。
局部跳转(如goto)集中错误处理,但破坏代码结构。
非局部跳转(如setjmp/longjmp)适用于深层嵌套调用中的错误,模拟异常机制。
信号处理用于外部事件指示,通过signal/raise函数设置和捕获。
终止程序通常使用exit和abort函数,前者有终止状态参数,后者发送SIGABRT信号。
断言(assert)用于有条件地终止程序,检查调试版本中表达式是否成立。
封装错误检查和处理代码,减少重复性。
通过上述方法,可以实现对嵌入式C编程中错误异常的统一处理,提升程序的健壮性和稳定性。