为什么#define同样有效时使用枚举?

时间:2011-03-09 08:49:21

标签: c enums

所以枚举就是这样的:

enum {
  false,
  true
}

相当于

int false = 0
int true = 1

为什么我不会将enum替换为#define

#define FALSE 0
#define TRUE 1

对我而言,它们似乎是可以互换的。我知道#define能够处理参数,因此以与enum完全不同的方式运行。在这种情况下enum 时,#define的主要用途究竟是什么?

如果我猜测,因为#define是预处理器功能,enum会有一些运行时优势。我有多远?

提前致谢。

4 个答案:

答案 0 :(得分:29)

当您有一长串想要映射到数字的内容时,枚举的优势就会显现出来,并且您希望能够在该列表的中间插入一些内容。例如,你有:

pears 0
apples 1
oranges 2
grapes 3
peaches 4
apricots 5

现在你想在橘子之后放橘子。使用#defines,你必须重新定义葡萄,桃子和杏子的数量。使用枚举,它会自动发生。是的,这是一个人为的例子,但希望它能给你一个想法。

答案 1 :(得分:14)

我发现它在gdb等环境中进行调试很有用,因为枚举值是在编译时处理的(其中#define是预处理器宏),因此可用于内省。

答案 2 :(得分:4)

虽然您的问题被标记为C,但在使用C ++编写时有一个很大的优势,您可以将enum:s放在类或名称空间中。这样你可以引用你的常量,比如'SpaceshipClass :: galaxy'。

答案 3 :(得分:0)

枚举是一个整数常量。所以,在编译过程中会有类型检查。