enum MyType_e {A, B, C}; #define A 0语句 int即int var = A完全合法,但var不是类型MyType_e那么枚举名称的用途是什么?
编辑 根据下面的评论,我对枚举的理解似乎存在很大缺陷.枚举与#define语句无关. 枚举在编译时解析,并进行输入.
使用enum类型传达意图.
假设您有一个以enum常量作为参数的函数.
void foo(enum MyType_e e);
Run Code Online (Sandbox Code Playgroud)
是自我记录有效输入是什么,但:
void foo(int e);
Run Code Online (Sandbox Code Playgroud)
不是.此外,如果您尝试传递该enum类型的不兼容值,编译器可能会发出警告.来自ISO C99规范的附件I("共同警告"):
实施可能会在许多情况下产生警告......以下是一些较常见的情况.
[...]
- 除了通过赋值该类型的成员的枚举常量,或者具有相同类型的枚举变量,或者返回相同枚举类型的函数的值,赋予枚举类型的对象的值( 6.7.2.2).
某些编译器(例如,gcc)甚至可能会生成警告,如果您switch在enum类型上使用但忽略处理其所有常量并且没有default案例.