【问题标题】:Anonymous vs Defined Enums [duplicate]匿名与定义的枚举[重复]
【发布时间】:2013-10-06 17:44:52
【问题描述】:

虽然我有使用 Java 枚举的经验,但 typedef 和 Objective-C / C 风格的枚举对我来说还是陌生的。我似乎无法理解开头声明名称的枚举与未声明名称的枚举之间的区别。例如:

typedef enum Months {JAN, FEB, MAR, APR}
    Months;

对比

typedef enum {JAN, FEB, MAR, APR}
    Months;

是否有理由选择前者而不是后者?前者通过两次声明“月”似乎是多余的。

这个question 看起来很相似,但最后没有名字所以我不知道它是否回答了同样的问题。

【问题讨论】:

  • 一般来说,编译器对任何一个都可以,但根据我的经验,许多库为了清晰起见而使用第一个选项。另外,它是typedef,而不是typdef
  • 还应注意,您应该使用 typedef NS_ENUM(type, enumName) 来确保编译时枚举类型安全。
  • 我不明白这是怎么复制的。公认的答案表明我们使用前者而不是后者或 @paulrehkugler 建议的宏,但我在问为什么你会使用前者而不是后者,在阅读另一篇文章后我仍然不确定。只是为了历史意义吗?

标签: objective-c c enums


【解决方案1】:

一般情况下

typedef enum <tagname 1>
{
//values

}<tagname2>;

&lt;tagname 1&gt; 用于更清晰地定义枚举的全部内容

&lt;tagname2&gt; 只是一个引用名称,其中包含typedef enum &lt;tagname 1&gt; 的整个引用

编译器支持这两种变体

【讨论】:

  • 感谢cyberworm,关于您的回复有一个问题: 如何提供更清晰的信息?他们曾经使用过不同的名字吗?
  • 根据指南,您必须使用 tagname1 来提供有关枚举的更有意义的信息
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-01
  • 1970-01-01
  • 2023-03-18
  • 1970-01-01
相关资源
最近更新 更多