C和枚举

时间:2014-08-29 17:27:23

标签: c enumeration

创建enum类型的变量有什么好处?我知道如何定义枚举类型和变量 - 但是,我没有看到它的优势?

#include <stdio.h>
int main(void){

    enum colour{
        white,
        red=2,
        green,
        blue,
        yellow,
        black
    } jacket;

    jacket=50;
    int shirt=yellow;
    printf("%d\n",jacket);
    printf("%d",shirt);

   return 0;
}

在上面的代码中,jacket定义为enum,但shirt定义为整数。 enum类型不会阻止我使用未指定为元素的值。 integer类型也不会阻止我将其分配给enum类型的值。

上面的代码给出了以下输出:

50
5

这些变量之间的功能差异是什么?

4 个答案:

答案 0 :(得分:3)

  

这些变量之间的功能差异是什么?

shirtjacket都是整数类型,但shirtintenum colour。后者是一个实现定义的整数类型,例如可以是unsigned int

例如,在gcc中,默认enum colourunsigned int

现在使用enum类型的变量有一些优势。例如,一些编译器能够检测并警告不同enum类型的混淆。此外,如果您使用enum类型的对象作为switch语句的控制表达式,则某些编译器(例如,gcc-Wswitch)能够发出警告,如果您不要列出所有enum个常数案例。此外,调试器通常能够为enum对象值显示一些漂亮的符号。

答案 1 :(得分:2)

enum只是一种赋予常数符号值的方法;常数只是整数&#39;与定义相比,这有几个优点:如果连续,则自动创建值,并且enum服从块范围。它还告诉其他程序员,除了变量之外,你只能接受这些值。调试器可以显示符号名称,这可能有帮助,而不是仅显示原始值。

答案 2 :(得分:1)

哪种代码更容易理解?

Tshirt tee = new Tshirt();

tee.setColor(4);

enum color { red, green, blue, black, pink, grey, brown };
Tshirt *tee = new Tshirt();

tee.setColor( pink );

答案 3 :(得分:0)

其中一个优点是,它提高了程序的可读性。

例如:

enum colour{white, red=2, green, blue, yellow, black} jacket;

int shirt_price[10];

shirt_price[red] = 50;
shirt_price[green] = 100;
shirt_price[black] = 500;

现在你不需要记住索引,只需使用枚举变量。