#define является команда препроцессора, перечисление находится в C или Язык C++.
Всегда лучше использовать перечисления для #define для таких случаев. Одна вещь - безопасность типа. Другим является то, что, когда у вас есть последовательность значений, вам нужно только указать начало последовательности в перечислении, другие значения получат последовательные значения.
enum {
ONE = 1,
TWO,
THREE,
FOUR
};
вместо
#define ONE 1
#define TWO 2
#define THREE 3
#define FOUR 4
В качестве побочного сведению, есть еще некоторые случаи, когда вы, возможно, придется использовать #define (как правило, в течение некоторого рода макросов, если вам нужно, чтобы быть в состоянии построить идентификатор, который содержит константу), но это своего рода макрос черная магия, и очень очень редко, чтобы идти в путь. Если вы идете на эти конечности, вам, вероятно, следует использовать шаблон C++ (но если вы застряли с C ...).
Вы также можете поместить перечисления в пространствах имен, тогда как макросы не могут быть. – 2008-09-26 03:48:50
Однако макросы могут быть легко сконфигурированы вне самого исходного кода (например, из команды построения) – 2016-01-31 17:32:07