背景

我试图将-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的原因是因为编译器为此枚举器选择了更窄的无符号类型,因为它可以看到的firstsecond的值分别为0、1。因此,选择的类型为unsigned char,因为它可以表示这两个类型值(value)观。
此类型将从-1换到255。

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

10-06 02:45