枚举名称的用途是什么?

Vor*_*rac 11 c enums

  • 枚举是"命名的常量集合": enum MyType_e {A, B, C};
  • 这些常量在枚举的父作用域中声明,即如果枚举在文件作用域中声明,并且未命名,则它等同于一系列例如#define A 0语句
  • 枚举常量的基础类型总是intint var = A完全合法,但var不是类型MyType_e

那么枚举名称的用途是什么?

编辑 根据下面的评论,我对枚举的理解似乎存在很大缺陷.枚举与#define语句无关. 枚举在编译时解析,并进行输入.

jam*_*lin 6

使用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)甚至可能会生成警告,如果您switchenum类型上使用但忽略处理其所有常量并且没有default案例.