перечисление или определяет, какой я должен использовать?

перечисление и #define, кажется, могут сделать то же самое для примера ниже определения стиля. Поймите, что #define является макроподстановкой для препроцессора компилятора. Есть ли какие-либо обстоятельства, каждый предпочтен по другому?

typedef enum {
    SelectionStyleNone,
    SelectionStyleBlue,
    SelectionStyleRed
} SelectionStyle;

по сравнению с

#define SELECTION_STYLE_NONE 0
#define SELECTION_STYLE_BLUE 1
#define SELECTION_STYLE_RED  2
8
задан Gaius Parx 25 June 2010 в 21:59
поделиться

5 ответов

Никогда не используйте определения, если вы НЕ ДОЛЖНЫ иметь функциональные возможности препроцессора. Для чего-то столь же простого, как целочисленное перечисление, используйте перечисление.

11
ответ дан 5 December 2019 в 09:24
поделиться

Перечисление лучше всего, если вам нужна безопасность типов. Они также экспортируются как символы, поэтому некоторые отладчики могут отображать их встроенными, а для определений - нет.

Основная проблема с перечислениями, конечно же, заключается в том, что они могут содержать только целые числа. Для строк, чисел с плавающей запятой и т. Д. Вам может быть лучше использовать константу или определение.

3
ответ дан 5 December 2019 в 09:24
поделиться

Короткий ответ: вероятно, это не имеет большого значения. Эта статья дает довольно хороший длинный ответ:

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

2
ответ дан 5 December 2019 в 09:24
поделиться

Когда есть встроенная функция языка, поддерживающая то, что вы хотите делать (в данном случае перечисление элементов), вам, вероятно, следует использовать эту функцию.

1
ответ дан 5 December 2019 в 09:24
поделиться

Определения, вероятно, немного быстрее (во время выполнения), чем перечисления, но преимущество, вероятно, заключается в небольшом количестве циклов, поэтому оно незначительно, если вы не делаете что-то, что действительно этого требует. Я бы пошел с enum, так как препроцессор труднее отлаживать.

1
ответ дан 5 December 2019 в 09:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: