2015-02-06 233 views
1

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

你有没有尝试过吗? – 2015-02-06 13:05:56

+0

如果两者都具有完全相同的值集合,那么为什么他们都定义了它们呢?只需定义一个并在两个模块中使用这一个。 无论如何,将一个枚举枚举为另一个枚举并不总是一个好主意。它应该工作。 – 2015-02-06 13:08:56

+1

哪个编译器/工具(使用哪些选项)会导致警告?标准没有任何要求('gcc -std = c99 -pedantc -Wall -Wextra'不会发出一个)。 – mafso 2015-02-06 13:13:11

回答

3

我从你的问题做了一个工作代码。您错过了您的类型定义中的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实际上只是整数。无论如何,恕我直言,这是一个很好的做法,做一个明确的演员。

+0

b =(EnumB)a;成功了! – Aadishri 2015-02-09 13:44:27

+0

在迅速,我们不能这样做,你有任何解决方法, – Ballu 2016-11-08 14:55:47

+0

http://stackoverflow.com/questions/25276775/swift-cast-int-into-enumint – meskobalazs 2016-11-08 15:38:16

1

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

这是有效的,标准不需要诊断。尽管如此,有些实现会在您尝试混合不同的enum类型时发出警告。

为了避免警告,最好不要混淆枚举类型,否则我会建议将它转换为枚举类型。

b = (EnumB)a; 

,除非你的编译器是很聪明的做法是:

b = (int)a; 

也应努力为enum常数是int类型和编译器不应该警告正确enum不变时(类型int )被分配给与右边关联的enum类型。