学习笔记分析--c++如何简单处理错误信息

在c++项目中如何处理在代码中处理错误信息呢?

我总结了两种非常常用且简单的方式,几分钟就能学废的那种!


1. 使用 errnostrerror(C 风格)

适用于系统调用、标准库函数(如文件操作)。

复制代码
#include <cerrno>     // 提供 errno 全局变量,用于存储最后一次系统调用的错误码
#include <cstring>    // 提供 strerror() 函数,将错误码转换为可读的错误描述字符串
#include <iostream>   // 提供 std::cerr 标准错误输出流
#include <fstream>    // 提供 std::ifstream 输入文件流类

int main() {
    // 尝试打开一个不存在的文件 "nonexistent.txt"
    // 构造函数会尝试打开文件,如果失败则文件流对象处于错误状态
    std::ifstream file("nonexistent.txt");
    
    // 检查文件流是否成功打开了文件
    // operator! 或 operator bool 都可以用来判断流状态
    // 如果文件打开失败(文件不存在),条件为 true
    if (!file) {
        // errno:这是一个全局整型变量,由系统调用或某些库函数在出错时设置
        // 注意:std::ifstream 内部可能不会自动设置 errno,
        // 但在大多数实现中,底层 open() 系统调用会设置 errno
        
        // strerror(errno):将 errno 中的数字错误码转换为人类可读的错误描述字符串
        // 例如:errno == 2 时,strerror(2) 返回 "No such file or directory"
        
        // std::cerr:标准错误输出流,默认输出到控制台(屏幕)
        // 与 std::cout 不同,cerr 是无缓冲的,能立即显示错误信息
        std::cerr << "Error: " << strerror(errno) << std::endl;
    }
    
    return 0;  // 程序正常结束,返回 0 表示成功
}

输出示例:

复制代码
Error: No such file or directory
//解释:No such file or directory 是错误信息

2. 使用 perror(简单打印到 stderr)

快速调试时使用。

复制代码
#include <cstdio>    // 提供 FILE 类型、fopen() 函数和 perror() 函数

int main() {
    // fopen():C 标准库函数,用于打开文件
    // 参数1:文件名 "nonexistent.txt"
    // 参数2:打开模式 "r" 表示只读模式(read)
    // 返回值:成功返回 FILE* 指针,失败返回 NULL(即 nullptr)
    FILE* f = fopen("nonexistent.txt", "r");
    
    // 检查文件是否成功打开
    // 如果 f 为 NULL(空指针),说明文件打开失败
    if (!f) {
        // perror():C 标准库函数,专门用于打印系统错误信息
        // 功能:
        //   1. 先输出传入的自定义字符串:"fopen failed"
        //   2. 自动添加 ": " 分隔符
        //   3. 根据当前 errno 的值,输出对应的错误描述字符串
        //   4. 最后输出换行符 '\n'
        //
        // 例如,如果文件不存在,errno 被设为 2(ENOENT)
        // 输出结果:fopen failed: No such file or directory
        //
        // 注意:perror() 输出到 stderr(标准错误流),而不是 stdout
        perror("fopen failed");
    }
    
    return 0;  // 程序结束
}

输出:

复制代码
fopen failed: No such file or directory
//解释:No such file or directory 是错误信息
//等价于上面一种方式:std::cerr << "fopen failed: " << strerror(errno) << std::endl;

如果对你有帮助,留下小爱心谢谢(◕ᴗ◕✿)