enum MyType_e {A, B, C};
#define A 0
语句int
,即int var = A
完全合法,但var
不属于MyType_e
枚举名称的目的是什么?
修改 根据下面的评论,我对枚举的理解似乎存在很大缺陷。 枚举与#define语句无关。 Enums are resolved at compile time,并且已键入。
答案 0 :(得分:6)
使用enum
类型传达意图。
假设您有一个以enum
常量作为参数的函数。
void foo(enum MyType_e e);
是关于什么是有效输入的自我记录,但是:
void foo(int e);
不是。此外,如果您尝试传递enum
类型的不兼容值,编译器可能会发出警告。来自ISO C99规范的附件I(“共同警告”):
实施可能会在许多情况下产生警告......以下是一些较常见的情况。
[...]
- 除了通过赋值该类型的成员的枚举常量,或者具有相同类型的枚举变量,或者返回该类型的函数的值,赋予枚举类型的对象的值。枚举类型(6.7.2.2)。
如果在switch
类型上使用enum
但忽略处理所有常量并且没有default
,某些编译器(例如gcc)甚至可能会生成警告情况下。
答案 1 :(得分:2)
虽然你可以完美地说
int var = A
变种
enum mytype var = A
出于记录原因,更好。
答案 2 :(得分:1)
上面的答案是正确的,我只想添加某些调试器,能够在悬停或隐藏枚举类型变量时显示枚举名称。这确实有助于清晰,特别是当枚举用于状态机实现中的状态时。