我正在尝试将 -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;
}
Run Code Online (Sandbox Code Playgroud)
如果type是默认情况,ctype则应变为 -1,但事实并非如此。我printf用来调试的时候,ctype是255。
为什么ctype变成 255 而不是 -1?
使用枚举器列表中的值定义一个枚举器,结果将是正确的:
typedef enum test {
minus_one = -1 ,
first,
second,
} soc_ctr_type_t;
Run Code Online (Sandbox Code Playgroud)
您看到 255 的原因是因为编译器为此枚举器选择了一个较窄的无符号类型,因为它只能看到first, second,其值为 0、1。因此选择的类型是unsigned char因为它可以表示这两个值。
此类型将从 -1 换行到 255。
C 中的枚举数不是特殊类型,它们由整数类型表示,因此您可以将值分配给枚举数列表中不存在的枚举数。