C 将指向枚举的指针传递给指向int输出参数的指针

C 将指向枚举的指针传递给指向int输出参数的指针,c,casting,enums,C,Casting,Enums,我有类似以下代码: void generateInt(int *result) { /* chosen by fair dice roll*/ *result = 1; } typedef enum colour { RED, GREEN, BLUE } COLOUR; int main(int, char**) { COLOUR col, col2; int i; generateInt(&i); col = (COLOUR)i; gen

我有类似以下代码:

void generateInt(int *result)
{
  /* chosen by fair dice roll*/
  *result = 1;
}

typedef enum colour
{
  RED,
  GREEN,
  BLUE
} COLOUR;

int main(int, char**)
{
  COLOUR col, col2;
  int i;

  generateInt(&i);
  col = (COLOUR)i;

  generateInt((int*)(&col2));

  return 0;
}
在第二次调用
generateInt
之后,
col
col2
是否都保证等于
GREEN
?我知道第一个版本的设置
col
是合法的,但我不知道是否定义了它,如果将指向enum的指针转换为指向int的指针,然后通过指针赋值,会发生什么情况。

这当然不好。您没有理由相信枚举的底层类型是
int
,因此强制转换指针可能非常不合适

为什么不改变功能呢

void generateInt(COLOUR * c)
{
    *c = GREEN;
}

这应该是一种适当的方式:

void generateInt(COLOUR * c)
{
    //Roll number given here
    switch(roll_result)
    {
      case 0 :
        *c = RED;
      break;
      case 1 :
         *c = GREEN;
      break;          
      case 2 :
         *c = BLUE;
      break;
      //...
      default :
      break;
   }
}

因为,实际上,我正在加载一个已经写入磁盘的结构
generateInt
实际上是一个通用函数,它从从文件中获取的数据中读取下一个(整数)字段。@Chowlett这样的实现是不可移植的。对于具有不同
sizeof(int)
或字节顺序的机器如何?为什么不使用一致的存储格式,并让loader函数设置枚举的值呢?