在C语言中区分客户端错误和程序员错误

在C语言中区分客户端错误和程序员错误,c,error-handling,C,Error Handling,这个问题更具哲理性,而非技术性,所以我希望你不要介意我故意忽略正在发生的事情的混乱细节 我在一个为特定协议实现服务器的团队中,对于如何区分来自客户端的错误(例如,在打开之前请求读取)和编程错误(例如,将未初始化的文件句柄传递给文件系统),存在一些争论。该协议具有将错误返回给客户端的机制。不幸的是,协议代码与我们的内部错误代码不匹配 到目前为止,我们一直在维护两个不同的错误代码,当我们进出helper函数时,每次返回时都会检查这两个错误代码,但这似乎很麻烦,也不美观,我们正在考虑重构整个错误系统

这个问题更具哲理性,而非技术性,所以我希望你不要介意我故意忽略正在发生的事情的混乱细节

我在一个为特定协议实现服务器的团队中,对于如何区分来自客户端的错误(例如,在打开之前请求读取)和编程错误(例如,将未初始化的文件句柄传递给文件系统),存在一些争论。该协议具有将错误返回给客户端的机制。不幸的是,协议代码与我们的内部错误代码不匹配

到目前为止,我们一直在维护两个不同的错误代码,当我们进出helper函数时,每次返回时都会检查这两个错误代码,但这似乎很麻烦,也不美观,我们正在考虑重构整个错误系统

我的问题是,互联网,你过去是如何处理这个问题的?有没有什么漂亮的、规范的方法来处理我们还没有发现的并行错误代码

可能值得注意的是,我们使用的是纯C语言,因此我们既不能使用异常,也不能构建错误类的层次结构来解决问题

谢谢


--Dan

也许我不理解你的问题,但我处理几组不同错误代码的技巧是在“主错误代码”中为它们分配不同的范围。因此,如果协议错误在0-999范围内,则内部错误可能是1000-1999。您可以编写函数或宏来测试错误代码所处的范围,并进行算术运算,将错误代码从其原始方案(可能基于0)转换到其在主错误代码分配中的范围,然后再转换回来


即使您的某个错误代码系统使用的是完整的32位数字,而不是较小的范围,您也可以通过使用64位整数作为主错误代码来解决此问题。

我不确定您想要的答案是什么,但也许您可以尽可能多地使用内部错误代码,并且只在最外层(构建响应时)将它们转换为客户机错误代码。一些说明问题的代码将有助于使问题更具主题性(尽管通常不鼓励征求意见的问题)。