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

Aad*_*hri 6 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;
Run Code Online (Sandbox Code Playgroud)

这样的分配会导致警告:枚举类型与另一种类型混合我可以通过类型转换避免切换情况,例如:

b = (int)a;
Run Code Online (Sandbox Code Playgroud)

要么

b = (EnumB)a;
Run Code Online (Sandbox Code Playgroud)

mes*_*azs 8

我根据您的问题制作了工作代码。您错过了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;
}
Run Code Online (Sandbox Code Playgroud)

该代码b = a也可以正常运行,而无需强制转换。也是b = (int) a;有效的-至少在C11中,因为enums实际上只是整数。无论如何,恕我直言,做一个明确的演员表是一个好习惯。