在c++项目中如何处理在代码中处理错误信息呢?
我总结了两种非常常用且简单的方式,几分钟就能学废的那种!
1. 使用 errno和 strerror(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;
如果对你有帮助,留下小爱心谢谢(◕ᴗ◕✿)