Why use enum when #define is just as efficient?
本问题已经有最佳答案,请猛点这里访问。
所以enum的工作原理如下:
1 2 3 4 | enum { false, true } |
这相当于
1 2 | int false = 0 int true = 1 |
为什么我不能用
1 2 | #define FALSE 0 #define TRUE 1 |
对我来说,它们似乎是可以互换的。 我知道
如果我猜测,因为
提前致谢。
当您有一长串想要映射到数字的内容时,枚举的优势就会出现,并且您希望能够在该列表的中间插入一些内容。例如,你有:
1 2 3 4 5 6 | pears 0 apples 1 oranges 2 grapes 3 peaches 4 apricots 5 |
现在你想在橘子之后放橘子。使用#defines,你必须重新定义葡萄,桃子和杏子的数量。使用枚举,它会自动发生。是的,这是一个人为的例子,但希望它能给你一个想法。
我发现它在gdb等环境中进行调试很有用,因为枚举值是在编译时处理的(其中#define是预处理器宏),因此可用于内省。
尽管您的问题被标记为C,但在使用C ++编写时,您可以将枚举:s放在类或命名空间中。这样你可以引用你的常量,如'SpaceshipClass :: galaxy'。
枚举是一个整数常量。所以,在编译过程中会有类型检查。