如何将一个枚举值转换/分配给另一个枚举

我在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; 

这样的赋值会产生一个警告:枚举类型与另一种类型混合我可以通过类型转换来避免switch-case,比如说

 b = (int)a; 

要么

 b = (EnumB)a; 

我根据你的问题制作了一份工作代码。 您错过了类型定义中的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真的只是整数。 无论如何,恕我直言,做一个明确的演员是一个好习惯。

enum类型是整数类型,您可以将任何整数值分配给任何整数对象。

这是有效的,标准不需要诊断。 然而,当您尝试混合使用不同的enum类型时,某些实现会发出警告。

为了沉默警告,最好不要混淆枚举类型,否则我建议将其强制转换为枚举类型。

  b = (EnumB)a; 

除非您的编译器非常智能,否则:

 b = (int)a; 

也应该作为enum常量使用int类型,并且当右enum常量(类型int )被分配给右关联enum类型时,编译器不应该发出警告。