我有问题, 当我为枚举指定-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 有人能帮我吗 ?谢谢
答案 0 :(得分:4)
在枚举器列表中定义一个具有该值的枚举器,结果将是正确的:
typedef enum test {
minus_one = -1 ,
first,
second,
} soc_ctr_type_t;
你看到255的原因是因为编译器为这个枚举器选择了一个更窄的无符号类型,因为它只能看到它first
,second
,其值为0,1因此,选择的类型是unsigned char
,因为它可以代表这两个值
此类型将从-1包装到255。
C中的枚举器不是特殊类型,它们由整数类型表示,因此您可以为枚举器列表中不存在的枚举器赋值。
答案 1 :(得分:1)
这里只有2501回答。
枚举的基础类型是可以的整数类型 表示枚举中定义的所有枚举器值。它是 实现定义的哪个整数类型用作底层 枚举的类型,但基础类型不应该是 大于int,除非枚举器的值不适合int 或unsigned int。