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

Gai*_*arx 8 objective-c

对于定义样式的示例,枚举和#define似乎能够做同样的事情.理解#define是编译器预处理器的宏替换.有什么情况比另一个更受欢迎吗?

typedef enum {
    SelectionStyleNone,
    SelectionStyleBlue,
    SelectionStyleRed
} SelectionStyle;
Run Code Online (Sandbox Code Playgroud)

VS

#define SELECTION_STYLE_NONE 0
#define SELECTION_STYLE_BLUE 1
#define SELECTION_STYLE_RED  2
Run Code Online (Sandbox Code Playgroud)

Pup*_*ppy 11

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


kmm*_*kmm 3

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

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