是否在[C]中向其他`enum`强制转换`enum`?

时间:2011-03-12 06:21:19

标签: c enums casting standards

我有两个枚举。

enum A { A1=1, A2=2 }

enum B { B1=1, B2=2 }

这是否符合C标准?

A a = A1;
B b = a;

(与Clang编译得很好,但我不能确定这是标准还是扩展行为)

4 个答案:

答案 0 :(得分:6)

它符合标准,但C99规范提到某些实现可能会产生警告:

  

实施可能会在许多情况下产生警告,其中没有一个被指定为本国际标准的一部分。以下是一些较常见的情况。

     
      
  • 除了通过赋值该类型的成员的枚举常量,或者具有相同类型的枚举变量,或者返回该类型的函数的值,赋予枚举类型的对象的值。枚举类型(6.7.2.2)。
  •   

答案 1 :(得分:0)

我相信在C enums中基本上是int s具有个性。 (这与C ++形成对比,它们是完全成熟的类型。)因此,分配不同的enum实际上仍然只是与int一起使用,因此它是合法的。但是,我不是说这是推荐的:))

答案 2 :(得分:0)

它是有效的标准C,但这是一个坏主意。请注意,不是有效的C ++。

答案 3 :(得分:0)

有效 - 枚举是旨在帮助开发人员的语言功能。如果您没有指定枚举项值,则会自动生成它们的值。 From another language