我在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)
我根据您的问题制作了工作代码。您错过了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实际上只是整数。无论如何,恕我直言,做一个明确的演员表是一个好习惯。