我希望有两个不同的enum
,但它们可能具有相同的字面值;例如:
typedef enum {ONE,TWO,THREE,FOUR,FIVE,SIX} NumbersEnum;
typedef enum {ONE,TWO,THREE,FIVE,EIGHT} FibonacciEnum;
这会引发编译错误,因为ONE
,TWO
,THREE
,FIVE
会在enum
中重复出现。
有没有办法让这个工作按原样(不改变文字名称或添加前缀或后缀)?
使用文字的代码是否有任何方式可以如下所示:int num = NumbersEnum.SIX;
而不是int num = SIX;
?
答案 0 :(得分:1)
没有。从一开始就是C和Objective-C语言的一部分。你不会改变它,没有人会为你改变它。
答案 1 :(得分:1)
你不能用enum
s做到这一点;他们的成员是全球性的,名称必须是唯一的。但是,您可以使用make pseudo-namespaces for constants来{{3}}进行{{3}}的简洁技术。
在相应的标题中声明您的“名称空间”:
struct
然后初始化实现文件中的值:
extern const struct _FibonacciNumbers
{
int one;
int two;
int three;
int five;
} FibonacciNumbers;
您现在可以访问常量,例如const struct _FibonacciNumbers FibonacciNumbers = {
.one = 1,
.two = 2,
.three = 3,
.five = 5
};
,其他FibonacciNumbers.one
类型可以使用相同的名称,因为每个类型的名称都是私有的。
所以你的第一个选项是“No”,而第二个选择是“Yes”。