C:为枚举赋值?

时间:2016-06-24 09:58:31

标签: c enums

我有问题, 当我为枚举指定-1时,返回值是255?

typedef enum test {
        first,
        second,
}soc_ctr_type_t 

soc_ctr_type_t ctype;

switch(type){
   case 1:
       ctype = first;
   break;
   case 2:
      ctype = second;
   break;
   default:
      ctype = -1;
}

如果type == default,ctype应为-1,但不是, 当我使用printf查看时,ctype == 255 有人能帮我吗 ?谢谢

2 个答案:

答案 0 :(得分:4)

在枚举器列表中定义一个具有该值的枚举器,结果将是正确的:

typedef enum test {
        minus_one = -1 ,
        first,
        second,
} soc_ctr_type_t;

你看到255的原因是因为编译器为这个枚举器选择了一个更窄的无符号类型,因为它只能看到它firstsecond,其值为0,1因此,选择的类型是unsigned char,因为它可以代表这两个值 此类型将从-1包装到255。

C中的枚举器不是特殊类型,它们由整数类型表示,因此您可以为枚举器列表中不存在的枚举器赋值。

答案 1 :(得分:1)

这里只有2501回答。

  

枚举的基础类型是可以的整数类型   表示枚举中定义的所有枚举器值。它是   实现定义的哪个整数类型用作底层   枚举的类型,但基础类型不应该是   大于int,除非枚举器的值不适合int   或unsigned int。

另一个好读Are C++ enums signed or unsigned?