我希望有两个不同的enum
,但它们可能有相同的文字;例如:
typedef enum {ONE,TWO,THREE,FOUR,FIVE,SIX} NumbersEnum;
typedef enum {ONE,TWO,THREE,FIVE,EIGHT} FibonacciEnum;
这将引发编译错误,因为ONE
、TWO
、THREE
、FIVE
在两个enum
s中都重复。
有没有办法做到这一点(不更改文字的名称或添加前缀或后缀)?
有没有办法让我使用文字的代码看起来像这样:int num = NumbersEnum.SIX;
而不是int num = SIX;
?
否。这是C语言和Objective-C语言的一部分。你不会改变它,也没有人会为你改变它。
不能使用enum
s执行此操作;它们的成员是全局的,并且名称必须是唯一的。然而,有一种巧妙的技术可以用来为struct
s的常量创建伪名称空间。
在适当的标题中声明您的"命名空间":
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
,其他struct
类型可以使用相同的名称,因为这些名称对每个类型都是私有的。
因此,第一个选项是"否",第二个选项则是"是"。