c——enum

来源:互联网 发布:c语言getch 编辑:程序博客网 时间:2024/05/13 04:03

enum

enum EPokerColor{    DIAMOND,    CLUB,    HEART = 8,    SPADE,};void enum_type(){    printf("DIAMOND = %d, CLUB = %d, HEART = %d, SPADE = %d\n", DIAMOND, CLUB, HEART, SPADE);    enum EPokerColor pokerColor1;    enum EPokerColor pokerColor2;    enum EPokerColor pokerColor3;    pokerColor1 = 18;    pokerColor2 = HEART;    pokerColor3 = pokerColor1 + pokerColor2;    printf("pokerColor1 = %d, pokerColor2 = %d, pokerColor3 = %d\n", pokerColor1, pokerColor2, pokerColor3);}
output:
DIAMOND = 0, CLUB = 1, HEART = 8, SPADE = 9pokerColor1 = 18, pokerColor2 = 8, pokerColor3 = 26
结论:
  • 枚举常量可显式指定,也可默认指派,默认指派值为其前一个枚举常量值递增1,第一个枚举常量默认指派值为0,枚举常量值可重复
  • 枚举类型的本质是整型,整型可以执行的操作,枚举类型亦可
  • 引入枚举类型的目的只是为了增强代码可读性

enum类型

enum EShape{    RECT = 2147483647,//32位int取值上限};enum EColor{    BLUE = 2147483648,//32位int取值上限+1,};enum EAnimal{    DOG = 9223372036854775807,//64位long取值上限};enum EFood{    RICE = 9223372036854775808,//64位long取值上限+1};void type_check(signed int){    cout << "signed int" << endl;}void type_check(unsigned int){    cout << "unsigned int" << endl;}void type_check(signed long){    cout << "signed long" << endl;}void type_check(unsigned long){    cout << "unsigned long" << endl;}void type_check(signed long long){    cout << "signed long long" << endl;}void type_check(unsigned long long){    cout << "unsigned long long" << endl;}void enum_type_check(){    cout << "-----sizeof-----" << endl;    cout << "sizeof(int) = " << sizeof(int) << endl;    cout << "sizeof(long) = " << sizeof(long) << endl;    cout << "sizeof(long long) = " << sizeof(long long) << endl;        cout << "-----enum-----" << endl;    enum EShape shape;    enum EColor color;    enum EAnimal animal;    enum EFood food;        type_check(shape);    type_check(color);    type_check(animal);    type_check(food);}
output:
-----sizeof-----sizeof(int) = 4sizeof(long) = 8sizeof(long long) = 8-----enum-----signed intunsigned intsigned longunsigned long
结论:
  • 枚举类型对应的整型按取值范围以int->unsigned int->long->unsigned long->long long->unsigned long long顺序匹配,确保匹配类型包含枚举类型所有枚举常量值
0 0