gpt4 book ai didi

c - 如何在 C 中使用具有相同名称的不同枚举

转载 作者:行者123 更新时间:2023-11-30 14:40:52 27 4
gpt4 key购买 nike

我在一个库 liba 中有一个 enum像这样:

typedef enum LIB_A_ENUM {
FOO,
BAR
} LIB_A_ENUM

libb中我有另一个枚举:

typedef enum LIB_B_ENUM {
FOO,
BAR,
BAZ // has a few different ones.
} LIB_B_ENUM

我想在 libb 中使用它们,如下所示:

int
some_function() {
if (LIB_A_ENUM.FOO) {
// ...
} else if (LIB_B_ENUM.FOO) {
// ...
}
}

想知道如何做这种事情。我想我应该创建一堆全局变量,例如:

LIB_A_ENUM LIB_A_ENUM_FOO = FOO;
LIB_A_ENUM LIB_A_ENUM_BAR = BAR;
// ...
LIB_B_ENUM LIB_B_ENUM_FOO = FOO;
LIB_B_ENUM LIB_B_ENUM_BAR = BAR;
LIB_B_ENUM LIB_B_ENUM_BAZ = BAZ;
// ...

int
some_function() {
if (LIB_A_ENUM_FOO) {
// ...
} else if (LIB_B_ENUM_FOO) {
// ...
}
}

想知道这是否是一种方法,或者是否有更好的方法。

实际上,我意识到你甚至不能拥有两个具有相同键的不同枚举。因此,也许最好的办法就是让枚举值在全局范围内唯一。我不确定。

最佳答案

你是对的。由于枚举值存储在全局范围内,因此它们必须是全局唯一的。防止枚举中名称冲突的常用方法是添加名称枚举的名称作为每个枚举值的前缀。它有点冗长,但在大多数情况下应该可以防止错误。

typedef enum LIB_A_ENUM {
LIB_A_ENUM_FOO,
LIB_A_ENUM_BAR
} LIB_A_ENUM;

typedef enum LIB_B_ENUM {
LIB_B_ENUM_FOO,
LIB_B_ENUM_BAR,
LIB_B_ENUM_BAZ
} LIB_B_ENUM;

关于c - 如何在 C 中使用具有相同名称的不同枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55317205/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com