dri*_*ker 9 c variables enums typedef definition
当我声明这样的枚举变量时:
enum paint_colors { RED, GREEN, BLUE, ...} colors;
是colors可变的有用吗?如果是这样,我该怎么办呢?
提前致谢.
Car*_*rum 13
你在那里真正做的是声明一个变量内联枚举的其余定义.它相当于:
enum paint_colors { RED, GREEN, BLUE };
enum paint_colors colors;
通常,您会看到typedef与定义相关联的内容:
typedef enum _paint_colors { RED, GREEN, BLUE } paint_colors;
这使您可以更像内置类型使用枚举:
paint_colors color;
因此,您的问题的答案是colors类型的变量enum paint_colors,并且可以以您认为适合此类变量的任何方式使用:
colors = RED;
if (colors != GREEN)
{
    colors = BLUE;
}
等等.
bta*_*bta 10
在内部,a enum被视为一个只能容纳有限范围值的整数.在这种情况下,常数RED,GREEN,BLUE,...将被定义和将等于0,1,2,...(分别地).该变量colors可以在任何可以使用的地方int使用.您可以使用运算符++来遍历颜色列表.声明之间的唯一区别enum paint_colors colors和int colors是所列举的变量可以应仅被分配枚举常数之一.
这给你一些好处比使用#define创造了一系列的常量和使用正常int进行colors.首先,一些调试器可以检测到colors枚举类型,并显示枚举常量的名称而不是数值.
更重要的是,这可以添加额外的类型检查层.它不是C标准所要求的,但是一些编译器检查并确保分配给枚举类型变量的值对应于枚举常量之一.
在心理上,你几乎可以想到这类似于说:
#define RED    0
#define GREEN  1
#define BLUE   2
typedef int paint_colors;
paint_colors colors;
变量被视为一个int,但明确地给它一个不同的类型有助于澄清变量是什么以及它用于什么.