перечисление и #define, кажется, могут сделать то же самое для примера ниже определения стиля. Поймите, что #define является макроподстановкой для препроцессора компилятора. Есть ли какие-либо обстоятельства, каждый предпочтен по другому?
typedef enum {
SelectionStyleNone,
SelectionStyleBlue,
SelectionStyleRed
} SelectionStyle;
по сравнению с
#define SELECTION_STYLE_NONE 0
#define SELECTION_STYLE_BLUE 1
#define SELECTION_STYLE_RED 2
Никогда не используйте определения, если вы НЕ ДОЛЖНЫ иметь функциональные возможности препроцессора. Для чего-то столь же простого, как целочисленное перечисление, используйте перечисление.
Перечисление лучше всего, если вам нужна безопасность типов. Они также экспортируются как символы, поэтому некоторые отладчики могут отображать их встроенными, а для определений - нет.
Основная проблема с перечислениями, конечно же, заключается в том, что они могут содержать только целые числа. Для строк, чисел с плавающей запятой и т. Д. Вам может быть лучше использовать константу или определение.
Короткий ответ: вероятно, это не имеет большого значения. Эта статья дает довольно хороший длинный ответ:
http://www.embedded.com/columns/programmingpointers/9900402?_requestid=345959
Когда есть встроенная функция языка, поддерживающая то, что вы хотите делать (в данном случае перечисление элементов), вам, вероятно, следует использовать эту функцию.
Определения, вероятно, немного быстрее (во время выполнения), чем перечисления, но преимущество, вероятно, заключается в небольшом количестве циклов, поэтому оно незначительно, если вы не делаете что-то, что действительно этого требует. Я бы пошел с enum, так как препроцессор труднее отлаживать.