如何在C中处理错误时提供上下文?

如何在C中处理错误时提供上下文?,c,error-handling,C,Error Handling,标准库函数将errno设置为提供上下文。我们用它来消除歧义 但是我可以用程序中的函数做什么呢?我想写这样的东西: 无效某些函数结构错误*e。。。; 指向局部变量的指针被传递给可能会出错的函数。若失败,它会将错误上下文设置为指针传递的变量 重要的是在发生错误时提供上下文的能力 我该怎么做 主要目标是编写弹性软件 下面我简要地描述了我在寻找合适的东西方面的研究 我已经尝试实现以下结构: struct error { enum error_type type; char

标准库函数将errno设置为提供上下文。我们用它来消除歧义

但是我可以用程序中的函数做什么呢?我想写这样的东西:

无效某些函数结构错误*e。。。; 指向局部变量的指针被传递给可能会出错的函数。若失败,它会将错误上下文设置为指针传递的变量

重要的是在发生错误时提供上下文的能力

我该怎么做

主要目标是编写弹性软件

下面我简要地描述了我在寻找合适的东西方面的研究

我已经尝试实现以下结构:

struct error {
        enum error_type type;
        char *msg;
};
有一点我不确定-注册新的枚举项错误类型。我不确定以下流程是否没有任何风险:

在error.h中注册新的错误类型 从函数返回该类型的错误
在这个流程中是否存在任何风险?这些风险是什么?它们可以被消除吗?

C在这里是一个硬要求吗?我之所以提到这是因为C++有例外,这些基本上就是你要找的。C没有这样的系统,所以你需要自己开发。值得一看成功的C代码库,看看它们使用了什么方法(如果有的话)。通常函数只返回错误代码,而不是像这样的完整结构,如果需要,您可以手动查找代码,如果需要,也可以通过函数查找代码。不幸的是,C是一个很难满足的要求。返回代码不适用于消除歧义。它们产生的问题和幻数一样。至少,我们应该使用枚举方法。我同意,值得研究的是成功的C代码基础,但是我相信我可以用STACKOPPORE社区更快地找到答案:有一些库使用StjjMP/LojJMP模拟C++异常。但我不能推荐一个,因为我没有使用它们。我比较熟悉的较旧的C代码库使用errno样式的系统,其中这些数字保留在头文件中以避免冲突。注意,这种方法差别很大,因为BSD和GNU这两种非常有影响力的编码风格在这里有着不同的理念。主要的约定是成功时返回0,错误时返回任何其他值,有时一致为正,有时一致为负。如何生成查找表是交易差异所在,因为这些差异可以在必要时通过脚本自动生成。C在这里是硬要求吗?我之所以提到这是因为C++有例外,这些基本上就是你要找的。C没有这样的系统,所以你需要自己开发。值得一看成功的C代码库,看看它们使用了什么方法(如果有的话)。通常函数只返回错误代码,而不是像这样的完整结构,如果需要,您可以手动查找代码,如果需要,也可以通过函数查找代码。不幸的是,C是一个很难满足的要求。返回代码不适用于消除歧义。它们产生的问题和幻数一样。至少,我们应该使用枚举方法。我同意,值得研究的是成功的C代码基础,但是我相信我可以用STACKOPPORE社区更快地找到答案:有一些库使用StjjMP/LojJMP模拟C++异常。但我不能推荐一个,因为我没有使用它们。我比较熟悉的较旧的C代码库使用errno样式的系统,其中这些数字保留在头文件中以避免冲突。注意,这种方法差别很大,因为BSD和GNU这两种非常有影响力的编码风格在这里有着不同的理念。主要的约定是成功时返回0,错误时返回任何其他值,有时一致为正,有时一致为负。如何生成查找表是交易差异所在,因为这些差异可以在必要时通过脚本自动生成。