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

时间:2015-02-06 13:04:12

标签: c enums

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

2 个答案:

答案 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类型。