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

How to cast / assign one enum value to another enum

我在 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,比如 say

b = (int)a;

b = (EnumB)a;

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

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

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

 b = (EnumB)a;

除非你的编译器真的很聪明,否则:

b = (int)a;

也应该工作,因为 enum 常量属于 int 类型,编译器不应在分配正确的 enum 常量(类型 int)时发出警告在右侧关联 enum 类型。

我根据你的问题制作了一个工作代码。您错过了类型定义中的 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 中是这样,因为 enums 实际上只是整数。无论如何,恕我直言,进行显式转换是一种很好的做法。