如何将一个枚举值转换/分配给另一个枚举
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 中是这样,因为 enum
s 实际上只是整数。无论如何,恕我直言,进行显式转换是一种很好的做法。
我在 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 中是这样,因为 enum
s 实际上只是整数。无论如何,恕我直言,进行显式转换是一种很好的做法。