枚举名称的用途是什么?

时间:2013-04-15 06:14:56

标签: c enums

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

枚举名称的目的是什么?

修改 根据下面的评论,我对枚举的理解似乎存在很大缺陷。 枚举与#define语句无关。 Enums are resolved at compile time,并且已键入。

3 个答案:

答案 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)

上面的答案是正确的,我只想添加某些调试器,能够在悬停或隐藏枚举类型变量时显示枚举名称。这确实有助于清晰,特别是当枚举用于状态机实现中的状态时。