枚举和#define似乎能够做同样的事情。理解#define是编译器预处理器的宏替换。有没有一种情况比另一种情况更受欢迎?
typedef enum {
SelectionStyleNone,
SelectionStyleBlue,
SelectionStyleRed
} SelectionStyle;
VS
#define SELECTION_STYLE_NONE 0
#define SELECTION_STYLE_BLUE 1
#define SELECTION_STYLE_RED 2
答案 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,引入细微错误的概率更高。