我可以用枚举变量做什么?

时间:2010-03-23 18:39:20

标签: c variables enums definition typedef

当我声明这样的枚举变量时:

enum paint_colors { RED, GREEN, BLUE, ...} colors;

colors变量有用吗?如果是这样,我该怎么办呢?

提前致谢。

7 个答案:

答案 0 :(得分:13)

你真正在做的是声明一个变量内联枚举的其余定义。它相当于:

enum paint_colors { RED, GREEN, BLUE };
enum paint_colors colors;

通常,您会看到与定义相关联的typedef

typedef enum _paint_colors { RED, GREEN, BLUE } paint_colors;

这使您可以更像内置类型使用枚举:

paint_colors color;

因此,您的问题的答案是colorsenum paint_colors类型的变量,并且可以以您认为适合此类变量的任何方式使用:

colors = RED;
if (colors != GREEN)
{
    colors = BLUE;
}

等等。

答案 1 :(得分:9)

在内部,enum被视为一个只能容纳有限范围值的整数。在这种情况下,常量REDGREENBLUE,...将被定义,并且将等于01,{{1 }}, ... (分别)。变量2可以在任何可以使用colors的地方使用。您可以使用int之类的运算符来遍历颜色列表。声明++enum paint_colors colors之间的唯一区别是枚举变量可以分配一个枚举常量。

与使用int colors创建一系列常量并使用普通#define int相比,这会带来一些好处。首先,一些调试器可以检测到colors是枚举类型,并将显示枚举常量的名称而不是数值。

更重要的是,这可以添加额外的类型检查层。它不是C标准所要求的,但是一些编译器检查并确保分配给枚举类型变量的值对应于枚举常量之一。

在精神上,你几乎可以想到这与说法相似:

colors

变量被视为#define RED 0 #define GREEN 1 #define BLUE 2 typedef int paint_colors; paint_colors colors; ,但明确地给它一个不同的类型有助于澄清变量是什么以及它用于什么。

答案 2 :(得分:1)

你可以画过山车了!

typedef struct {
  Color car;
  Color door_handle;
  Color wheels;
} RollerCoasterColors;

int main(void) {
  RollerCoasterColors roller_coaster_colors;
  roller_coaster_colors.car = RED;
  roller_coaster_colors.door_handle = YELLOW;
  roller_coaster_colors.wheels = PURPLE;

  // now paint_roller_coaster() knows what colour to paint each part!
  paint_roller_coaster(roller_coaster_colors);
}

答案 3 :(得分:1)

在C中,可以迭代枚举类型变量,例如++,+;但是在C ++中不允许这样做;

enum WEEKDAY {MON, TUE, WED, THU, FRI, SAT, SUN, END};
for(WEEKDAY day = 0; day < END; day++){
    printf("day index = %d\n", day);
}

可以用C编译,但不能用C ++编译;

答案 4 :(得分:0)

当您有一组给定的可能值时,枚举很有用,其中每个值都有一个有意义的名称。在其他地方,你引用的是枚举值,而不是“魔术数字”,它们在其他代码中可能变得毫无意义。

答案 5 :(得分:0)

enum paint_colors { RED, GREEN, BLUE, ...} colors;

这是您所做的枚举类型声明。 专门回答您的问题,您可以照常声明一个int变量,

enum paint_colors { RED, GREEN, BLUE, ...};
int colors;

,并对 colors 变量执行所有操作,就像对声明所做的一样。在操作部分上没有任何区别。是在枚举数常量值之外分配一个整数值,还是

colors=1676;    //Valid in both of our case

唯一的区别是使代码更具可读性和可读性,因为enum类型变量向程序员(特别是调试器)表明了其目的。取决于你;)

答案 6 :(得分:-1)

我发现枚举在调试过程中特别有用。如果只使用#define来定义用作某个变量值的常量,调试器将向您显示数字。使用枚举,它可以显示名称。

如果您需要一组可变值(常量),您可以按照您展示的方式定义它。