c - 区分 C 中的客户端错误和程序员错误

标签 c error-handling

这个问题更具哲学性,而不是技术性,所以我希望你不要介意我故意省略正在发生的事情的困惑细节。

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

到目前为止,我们在进出辅助函数时一直维护着两个不同的错误代码,每次返回时都会检查这两个错误代码,但这看起来很麻烦且不优雅,我们正在考虑重构整个错误系统。

我想问你,互联网,你过去是如何处理这个问题的?有没有我们还没有偶然发现的处理并行错误代码的优美、规范的方法?

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

谢谢

--丹

最佳答案

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

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

关于c - 区分 C 中的客户端错误和程序员错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18243694/

相关文章:

swift - “ fatal error :在展开可选值时意外发现nil”是什么意思?

php - 如何捕获PHP中的错误

c++ - C/C++ : Flush output before abnormal termination

c - 为什么我的树结构不分配它的变量?

c - 删除 Flash NOR : ioctl(MEMUNLOCK) return status?

asp.net-mvc - NerdDinner Visual Web Developer 2010设置

c - 为什么我的第一个子进程没有收到他 parent 的信号

C 初学者 - Hello World 程序在 Windows 上从命令提示符不执行任何操作

logging - 如何在XAMPP中启用错误报告

多进程上的 Python sys.excepthook