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

所以enum的工作原理如下:

enum { false, true } 

这相当于

 int false = 0 int true = 1 

为什么我不用#define替换enum

 #define FALSE 0 #define TRUE 1 

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

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

提前致谢。

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

梨子0
苹果1
橘子2
葡萄3
桃子4
杏子5

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

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

尽管您的问题被标记为C,但在使用C ++编写时,可以将枚举:s放在类或命名空间中。 这样你可以引用你的常量,如’SpaceshipClass :: galaxy’。

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