如何将一个枚举值转换/分配给另一个枚举
我在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
类型时,编译器不应该发出警告。