【问题标题】:enum or define, which one should I use?枚举或定义,我应该使用哪一个?
【发布时间】:2011-03-08 11:53:05
【问题描述】:

enum 和 #define 似乎能够做同样的事情,例如下面定义样式的示例。了解#define 是编译器预处理器的宏替换。有没有一种情况比另一种更受欢迎?

typedef enum {
    SelectionStyleNone,
    SelectionStyleBlue,
    SelectionStyleRed
} SelectionStyle;

#define SELECTION_STYLE_NONE 0
#define SELECTION_STYLE_BLUE 1
#define SELECTION_STYLE_RED  2

【问题讨论】:

标签: objective-c


【解决方案1】:

除非您必须具有预处理器的功能,否则永远不要使用定义。对于像整数枚举这样简单的事情,请使用枚举。

【讨论】:

    【解决方案2】:

    如果你想要类型安全,枚举是最好的。它们也作为符号导出,因此一些调试器可以内联显示它们,而不能用于定义。

    枚举的主要问题当然是它们只能包含整数。对于字符串、浮点数等...您可能会更好地使用 const 或 define。

    【讨论】:

    • 类型安全是什么意思?此代码是合法的: enum E { A = 1 }; E t = E(2);结果是未定义的。所以枚举是 TYPE 安全的,但不是 VALUE 安全的,所以它们几乎不像定义的那样/
    • 有了演员表,你可以做任何事情,这并不能证明一件事。
    【解决方案3】:

    简短的回答是,它可能并不重要。这篇文章提供了一个很好的长答案:

    http://www.embedded.com/columns/programmingpointers/9900402?_requestid=345959

    【讨论】:

      【解决方案4】:

      当有支持您想要做的事情的内置语言功能(在这种情况下,枚举项目)时,您可能应该使用该功能。

      【讨论】:

        【解决方案5】:

        定义可能比枚举稍微快一点(在运行时),但好处可能只是少数几个周期,所以它可以忽略不计,除非你正在做一些真正需要的事情。我会选择枚举,因为使用预处理器更难调试。

        【讨论】:

        • 我认为您的意思是“使用枚举”?
        【解决方案6】:
        #define DEFINED_VALUE 1
        #define DEFINED_VALUE 2 // Warning
        enum { ENUM_VALUE = 1 };
        enum { ENUM_VALUE = 2 }; // Error
        

        使用#define,引入细微错误的可能性更高。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-08-20
          • 1970-01-01
          • 1970-01-01
          • 2015-11-17
          • 1970-01-01
          • 1970-01-01
          • 2010-09-16
          • 1970-01-01
          相关资源
          最近更新 更多