# define - это команда препроцессора, enum на языке C или C ++.
Всегда лучше использовать перечисления вместо #define для такого рода случаев. Одна вещь - это безопасность типов. Другая причина состоит в том, что когда у вас есть последовательность значений, вам нужно только указать начало последовательности в перечислении, остальные значения получат последовательные значения.
enum {
ONE = 1,
TWO,
THREE,
FOUR
};
вместо
#define ONE 1
#define TWO 2
#define THREE 3
#define FOUR 4
В качестве дополнительного примечания, все еще есть случаи, когда вам, возможно, придется использовать #define (обычно для каких-то макросов, если вам нужно создать идентификатор, содержащий константу), но это макро черная магия, и очень, очень редкий путь. Если вы выходите на эти конечности, вам, вероятно, следует использовать шаблон C ++ (но если вы застряли с C ...).