我的代码类似于以下内容:
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
是合法的,但是我不知道它是否定义了如果将指向枚举转换为指向int的指针,然后通过指针赋值,会发生什么。
答案 0 :(得分:4)
肯定不好。你没有理由相信枚举的基础类型是int
,因此投射指针可能非常不合适。
为什么不改变功能?
void generateInt(COLOUR * c)
{
*c = GREEN;
}
答案 1 :(得分:1)
这应该是一个正确的方法:
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;
}
}