当#define 同样高效时为什么要使用枚举?

发布于 2024-10-20 18:11:08 字数 513 浏览 1 评论 0原文

所以枚举的工作方式如下:

enum {
  false,
  true
}

这相当于为什么

int false = 0
int true = 1

我不将 enum 替换为 #define?

#define FALSE 0
#define TRUE 1

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

如果我猜测,由于 #define 是一个预处理器功能,enum 将具有一些运行时优势。我离这还有多远?

提前致谢。

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 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.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

嗼ふ静 2024-10-27 18:11:08

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

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

现在您想将 tangerines 放在 oranges 之后。使用#define,您必须重新定义葡萄桃子的数量。使用枚举,它会自动发生。是的,这是一个人为的示例,但希望它能给您带来启发。

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.

缪败 2024-10-27 18:11:08

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

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.

深居我梦 2024-10-27 18:11:08

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

这样你就可以引用像SpaceshipClass::galaxy这样的常量。

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.

月竹挽风 2024-10-27 18:11:08

enum 是一个整数常量。因此,在编译过程中会进行类型检查。

enum is an integer constant. so, there would be a type check during compilation process.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文