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

use*_*num 15 c enums

所以enum的工作原理如下:

enum {
  false,
  true
}
Run Code Online (Sandbox Code Playgroud)

这相当于

int false = 0
int true = 1
Run Code Online (Sandbox Code Playgroud)

我为什么不可以替代enum#define

#define FALSE 0
#define TRUE 1
Run Code Online (Sandbox Code Playgroud)

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

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

提前致谢.

jco*_*ctx 29

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

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

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

  • 这是一个很好的答案.**但假设**读者(可能是任何NOOB)知道她可以用'pears 0`声明一个'enum`而不是其余的编号. (5认同)

mdu*_*all 14

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


Lin*_*cer 5

尽管您的问题被标记为 C,但用 C++ 编写时有一个很大的优势,您可以放置enum:s​​在类或名称空间内。

这样你就可以引用你的常量,比如SpaceshipClass::galaxy.