枚举或定义,我应该使用哪一个?

时间:2010-06-25 21:59:26

标签: objective-c

对于定义样式的示例,

枚举和#define似乎能够做同样的事情。理解#define是编译器预处理器的宏替换。有没有一种情况比另一种情况更受欢迎?

typedef enum {
    SelectionStyleNone,
    SelectionStyleBlue,
    SelectionStyleRed
} SelectionStyle;

VS

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

6 个答案:

答案 0 :(得分:11)

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

答案 1 :(得分:3)

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

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

答案 2 :(得分:2)

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

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

答案 3 :(得分:1)

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

答案 4 :(得分:1)

如果内置语言功能支持您要执行的操作(在这种情况下,枚举项目),您应该使用该功能。

答案 5 :(得分:0)

#define DEFINED_VALUE 1
#define DEFINED_VALUE 2 // Warning
enum { ENUM_VALUE = 1 };
enum { ENUM_VALUE = 2 }; // Error

使用#define,引入细微错误的概率更高。