开发者

Why use enum when #define is just as efficient? [duplicate]

This question already has answers here: "static const" vs "#define" vs "enum" (17 answers) Closed 7 years ago.

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 #defines, 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.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜