跳至主要內容

15.错误处理

约 398 字大约 1 分钟

C语言本身并不像一些高级编程语言那样具有内建的异常处理机制(如 C++ 中的 try-catch)。

因此,C 语言的错误处理主要通过以下几种方式来实现:

1. 使用返回值来报告错误

2. 使用 errno 来获取错误信息

C 语言标准库提供了一个全局变量 errno,它用于保存最近的错误码。

当标准库函数失败时,通常会设置 errno 变量,以便你在后续的代码中可以查询错误类型。需要包含头文件 <errno.h>。

errno 是一个全局变量,因此每次调用失败后,errno 的值会被更新。

通过查阅 errno.h 中定义的常量,可以确定错误的类型。

#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>

int main() {
    FILE *file = fopen("non_existent_file.txt", "r");
    if (file == NULL) {
        // 使用 errno 获取错误代码并打印错误信息
        printf("Error opening file: %s\n", strerror(errno));
        return 1;
    }
    
    // 正常的文件操作(略)
    
    fclose(file);
    return 0;
}

3. 使用 assert 来进行调试时的错误检查

assert 是 C 语言中一个用于调试的宏,它可以检查表达式是否为真。

如果表达式为假,程序会终止,并输出错误信息(文件名和行号)。

这通常用于在开发过程中检查不应该发生的错误。

#include <stdio.h>
#include <assert.h>

int divide(int a, int b) {
    assert(b != 0);  // 检查除数是否为零
    return a / b;
}

int main() {
    int result = divide(10, 0);  // 这将触发断言失败
    printf("Result: %d\n", result);
    return 0;
}