我在2个不同模块中有2个枚举,它们具有完全相同的值集。我怎么能把一个人扔到另一个?
typedef EnumA{
a_dog = 0,
a_cat = 1
} EnumA;
typedef EnumB{
b_dog = 0,
b_cat = 1
} EnumB;
EnumA a = a_dog;
EnumB b;
b = a;
这样的赋值会产生警告:枚举类型与另一种类型混合 我可以通过类型转换避免切换案例,比如说
b = (int)a;
或
b = (EnumB)a;
答案 0 :(得分:5)
我根据你的问题制作了一份工作代码。您错过了类型定义中的enum
。
typedef enum EnumA
{
a_dog = 0,
a_cat = 1
} EnumA;
typedef enum EnumB
{
b_dog = 0,
b_cat = 1
} EnumB;
int main()
{
EnumA a = a_dog;
EnumB b;
b = (EnumB) a;
printf("%d\n", b);
return 0;
}
代码b = a
在没有强制转换的情况下也能正常工作。另外b = (int) a;
正在工作 - 至少在C11中,因为enum
实际上只是整数。无论如何,恕我直言,做一个明确的演员是一个好习惯。
答案 1 :(得分:1)
enum
类型是整数类型,您可以将任何整数值分配给任何整数对象。
这是有效的,标准不需要诊断。然而,当您尝试混合使用不同的enum
类型时,某些实现会发出警告。
要保持警告,最好不要混淆枚举类型,否则我建议将其强制转换为枚举类型。
b = (EnumB)a;
除非您的编译器非常智能,否则:
b = (int)a;
也应该作为enum
常量的类型int
起作用,并且当正确的enum
常量(类型int
)被分配给时,编译器不应该发出警告正确关联enum
类型。