c - 如何避免枚举值的冲突?

标签 c

我正在构建一个前端库。后端产生一些枚举的错误代码:

enum backerr {BACK_ERR1, BACK_ERR2, BACK_ERR3};

我的前端产生了许多额外的错误代码:

enum fronterr {FRONT_ERR1, FRONT_ERR2, FRONT_ERR3};

为了方便起见,我希望有一个错误代码返回函数,该函数将根据发生的错误返回前端或后端错误。

考虑到我们无法知道后端的值,有什么方法可以在不使两个错误代码的值发生冲突的情况下发生这种情况?

最佳答案

如果您不知道后端可能生成什么,那么,不,没有办法可靠地选择您自己的错误代码,以免它们发生冲突。

所以你有几个选择(至少)。

如果后端以某种方式发布错误范围(例如在头文件中),第一个很有用。老实说,它应该这样做,因为程序没有其他方法来区分不同的错误代码和/或类型。

如果它们已发布,您很容易找到最高的代码并选择自己的代码,为后端扩展留出足够的空间。例如,如果后端使用 1..100,则从 1000 开始。任何系统突然报告比以前版本多十倍的错误的可能性都很小。

第二种方法是如果您想要真正的分离且冲突的可能性为零。

没有什么可以阻止您返回类似于以下内容的结构:

struct sFrontError {
    enum fronterr errorCode;
    enum backerr  backendCode;
};

并用它来纠正你的错误。那么你的前端枚举就变成了:

enum fronterr {FRONT_OK, FRONT_BACK, FRONT_ERR1, FRONT_ERR2, FRONT_ERR3};

您可以按如下方式对其进行评估:

  • 如果 errorCodeFRONT_OK,则没有错误。
  • 如果errorCodeFRONT_BACK,则错误来自后端,您可以在backendCode中找到其代码。
  • 否则,这是一个前端错误,并且 errorCode 中的代码完全指定了它。

关于c - 如何避免枚举值的冲突?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25800292/

相关文章:

c - 如何将结构传递给参数类型有两个星号的函数

c - 从文件行中读取多个不同的单词/数字

我们可以在其他头文件中执行线程吗?

c++ - 带有 SOIL 的 OpenGL 纹理

c - 在 header 中发现函数的隐式声明?

c - fork(),多个 child 的问题

控制台 I/O : printf & scanf not occurring in expected order

c - 使用 %lu 打印 int 类型 - C+XINU

c - 将随机值放入数组

c - getsysinfo(GSI_BOOTEDFILE,...) 重新托管