深入理解 C++ 与 Java 中的异常处理
1. 异常处理的必要性
在计算机程序运行时,会遇到各种可能导致错误的情况,比如:
- 程序尝试读取一个刚刚被其他程序意外删除的文件。
- 读取文件时遇到错误类型或格式不正确的数据。
- 磁盘已满时尝试写入文件。
- 访问数组越界。
- 网络编程中出现过度的通信延迟或中断。
面对这些情况,程序有两种选择:一是崩溃,这在实际应用中可能会导致灾难性后果;二是捕获错误条件并采取补救措施,比如寻求人工帮助或调用其他程序。
一种简单的保护措施是将可能出错的语句嵌入 if 块中,使其执行具有条件性。例如在 C 语言的文件输入输出操作中,在进行任何 I/O 操作之前,先确保文件指针不为 NULL ,并检查与输入输出流关联的错误和文件结束指示器,以确保 I/O 操作不是因错误而终止。然而,使用 if 语句进行错误(或现代术语中的异常)处理存在一些缺点:
- 程序员完全自主决定是否使用 if 语句,缺乏统一规范。
- 这种处理方式过于局部,当抛出异常时,难以将控制权顺利转移到不同的函数甚至不同的软件模块。
2. C 语言中的 setjmp - longjmp 机制
在 C 语言中,使用 setjmp 和 longjmp 宏(来自 setjmp.h 头文件)可以将控制权转移到不同的函数进行异常处理(在 C 术语中称为错误处理)。
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



