背景
我试图将-1分配给枚举变量,如下所示:
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
是默认情况,则ctype
应该变为-1,但不是。当我使用
printf
进行调试时,ctype
是255。问题
为什么
ctype
变成255而不是-1? 最佳答案
在枚举数列表中使用该值定义一个枚举数,结果将是正确的:
typedef enum test {
minus_one = -1 ,
first,
second,
} soc_ctr_type_t;
您看到255的原因是因为编译器为此枚举器选择了更窄的无符号类型,因为它可以看到的
first
,second
的值分别为0、1。因此,选择的类型为unsigned char
,因为它可以表示这两个类型值(value)观。此类型将从-1换到255。
C中的枚举器不是特殊类型,它们由整数类型表示,因此您可以为枚举器列表中不存在的枚举器分配一个值。