在C中是否有一些众所周知的嵌套错误处理模式/实践,比如Java中的嵌套异常?
使用通常的"只返回错误代码/成功"错误细节可能会丢失,然后程序才能确定它应该记录/报告错误.
想象一下类似于此的代码:
err B()
{
if (read(a/b/c/U.user) != OK) {
return read_error; //which would be eaccess or we could return even e_cannot_read_user
}
if (is_empty(read_user.name)) {
// we could tell exactly what is missing here
return einval;
}
...
}
err A()
{
if (B() != OK) {
if (cannot_handle_B_failing()) {
return e_could_not_do_b;
}
}
...
}
main()
{
...
if (A() != OK) && (no_alternative_solution()) {
report error_returned_by_A;
wait_for_more_user_input();
}
}
Run Code Online (Sandbox Code Playgroud)
有没有人在C中成功尝试某种嵌套错误代码/消息?可以报告(主要)用户名丢失或由于权限无效而无法读取文件F的事实.
有没有图书馆来支持这样的事情?
我建议你看看Apple的错误处理指南.它是为Objective-C而设计的,也是主要的课程NSError.他们使用userInfo字典(map)来保存有关错误的详细信息,并且如果需要,他们有预定义的NSUnderlyingErrorKey常量来保存NSError该字典中的底层对象.
因此,您可以struct为代码声明自己的错误并实现类似的解决方案.
例如
typedef struct {
int code;
struct Error *underlyingError;
char domain[0];
} Error;
Run Code Online (Sandbox Code Playgroud)
然后,您可以使用domain字段对错误进行分类(根据需要通过库,文件或函数); code确定错误本身的underlyingError字段和可选字段,以找出导致错误的基础错误.
| 归档时间: |
|
| 查看次数: |
231 次 |
| 最近记录: |