070. 编写代码处理C语言中的异常情况
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>