有没有办法在C中制作多个枚举的组合? 我希望有一个将在其他枚举中使用的公共枚举。
例如,我想写下面的代码:
enum common_e {
COMMON_LITERAL_0,
COMMON_LITERAL_1
}
enum first_e {
common_e, // <- Somehow I would like to have the two common_e's literals here
FIRST_LITERAL_0,
}
enum another_e {
common_e, // <- Somehow I would like to have the two common_e's literals here
ANOTHER_LITERAL_0,
ANOTHER_LITERAL_1
}
我担心的是在子动画中将公共文字保持为相同的顺序,因为它们被用作函数指针数组的ID。
有解决办法吗?
答案 0 :(得分:6)
enum
未命名空间,因此您不能拥有两个具有相同名称的枚举数。所以不,即使使用预处理器或其他魔法,也不能这样做。
如果您只是希望枚举值继续保留常用的值,那么如何:
enum common_e {
COMMON_LITERAL_0,
COMMON_LITERAL_1,
COMMON_LITERAL_END__
};
enum first_e {
FIRST_LITERAL_0 = COMMON_LITERAL_END__,
FIRST_LITERAL_1
};
答案 1 :(得分:4)
这样的事情:
enum common_e {
COMMON_LITERAL_0,
COMMON_LITERAL_1,
COMMON_MAX
}
enum first_e {
FIRST_LITERAL_0 = COMMON_MAX,
}
enum another_e {
ANOTHER_LITERAL_0 = COMMON_MAX,
ANOTHER_LITERAL_1
}
答案 2 :(得分:2)
嗯,你可以可以想象做这样的事情:
#define COMMON_E(N) N##_COMMON_LITERAL_0, \
N##_COMMON_LITERAL_1
enum first_e {
COMMON_E(FIRST), // <- Somehow I would like to have the two common_e's literals here
FIRST_LITERAL_0,
};
enum another_e {
COMMON_E(ANOTHER), // <- Somehow I would like to have the two common_e's literals here
ANOTHER_LITERAL_0,
ANOTHER_LITERAL_1
};
虽然我不确定这会带来什么好处......
问题是枚举不是命名空间,因此你必须提供不同的名称(因此是宏参数)。
答案 3 :(得分:0)
这在C中是不可能的。您只需要定义多个枚举。
答案 4 :(得分:0)
你无法准确地完成你的要求,但你可以做一些几乎同样好的事情。这些解决方案中的每一个都依赖于设置特定枚举成员的值的能力。
您可以将所有姓名放在一个枚举中:
enum every_e {
// common values
COMMON_LITERAL_0,
COMMON_LITERAL_1,
MAX_COMMON_LITERAL = COMMON_LITERAL_1,
// First set of extra values
FIRST_LITERAL_0 = MAX_COMMON_LITERAL+1,
FIRST_LITERAL_1,
FIRST_LITERAL_2,
// Second set of extra values
ANOTHER_LITERAL_0 = MAX_COMMON_LITERAL+1,
ANOTHER_LITERAL_1
};
如果你想使用不同的枚举类型,你可以使用相同的技巧:
enum common_e {
COMMON_LITERAL_0,
COMMON_LITERAL_1,
MAX_COMMON_LITERAL = COMMON_LITERAL_1
};
enum first_e {
FIRST_LITERAL_0 = MAX_COMMON_LITERAL+1,
};
enum another_e {
ANOTHER_LITERAL_0 = MAX_COMMON_LITERAL+1,
ANOTHER_LITERAL_1
};