【C语言练习】070. 编写代码处理C语言中的异常情况
070. 编写代码处理C语言中的异常情况
- 070. 编写代码处理C语言中的异常情况
- C语言异常处理的基本思路
- 返回值检查示例
- errno使用示例
- setjmp/longjmp示例
- 最佳实践建议
- 1. 使用返回值检查错误
- 2. 使用全局变量记录错误状态
- 3. 使用回调函数或信号处理程序
- 4. 使用`setjmp`和`longjmp`
- 示例运行
- 示例1:使用返回值检查错误
- 示例2:使用全局变量记录错误状态
- 示例3:使用回调函数或信号处理程序
- 示例4:使用`setjmp`和`longjmp`
- 注意事项
070. 编写代码处理C语言中的异常情况
在C语言中,没有内置的异常处理机制(如Java或Python中的try
/catch
),但可以通过一些编程技巧来处理异常情况。常见的方法包括:
- 使用返回值检查错误:函数返回特定的错误码。
- 使用全局变量记录错误状态:如
errno
。 - 使用回调函数或信号处理程序:处理运行时错误或中断。
- 使用
setjmp
和longjmp
:实现非局部跳转,模拟异常处理。
C语言异常处理的基本思路
C语言本身不提供类似C++或Java的try-catch异常处理机制,通常通过以下方式实现异常处理逻辑:
- 返回值检查:函数通过返回特定值(如NULL、-1等)表示错误状态,调用方需主动检查返回值。
- 全局变量errno:标准库函数常通过设置errno标识错误类型,需配合perror()或strerror()使用。
- 信号处理:通过signal()或sigaction()捕获运行时信号(如SIGSEGV)。
- 长跳转setjmp/longjmp:非局部跳转实现异常流程控制(谨慎使用)。
返回值检查示例
#include <stdio.h>
#include <stdlib.h>int divide(int a, int b, int* result) {if (b == 0) return -1; // 异常情况*result = a / b;return 0; // 成功
}int main() {int res;if (divide(10, 0, &res) == -1) {fprintf(stderr, "Division by zero\n");exit(EXIT_FAILURE);}printf("Result: %d\n", res);return 0;
}
errno使用示例
#include <stdio.h>
#include <errno.h>
#include <string.h>