Why use enum when #define is just as efficient? [duplicate]
So an enum works like this:
enum {
false,
true
}
which is equivalent to
int false = 0
int true = 1
Why wouldn't I substitute enum
with #define
?
#define FALSE 0
#define TRUE 1
To me, it seems like they are interchangeable. I'm开发者_StackOverflow中文版 aware that #define
is able to handle arguments, hence operates in an entirely different way than enum
. What exactly are the main uses of enum
when we have #define
in this case?
If I were to guess, as the #define
is a preprocessor feature, enum
would have some runtime advantages. How far off am I?
Thanks in advance.
The advantages of enum
show up when you have a long list of things you want to map into numbers, and you want to be able to insert something in the middle of that list. For example, you have:
pears 0 apples 1 oranges 2 grapes 3 peaches 4 apricots 5
Now you want to put tangerines
after oranges
. With #define
s, you'd have to redefine the numbers of grapes
, peaches
, and apricots
. Using enum, it would happen automatically. Yes, this is a contrived example, but hopefully it gives you the idea.
I find it useful for debugging in an environment such as gdb since enum values are handled at compile time (where #define is a preprocessor macro) and thus available for introspection.
Although your question is tagged as C, there is a big advantage when writing in C++, you can place enum:s
inside classes or namespaces.
This way you could refer to your constants like SpaceshipClass::galaxy
.
enum is an integer constant. so, there would be a type check during compilation process.
精彩评论