[英]Is valid casting an `enum` to other `enum` in [C]?
我有两个枚举。
enum A { A1=1, A2=2 }
enum B { B1=1, B2=2 }
这是否符合C的标准?
A a = A1;
B b = a;
(与Clang编译良好,但是我不确定这是标准行为还是扩展行为)
按照标准,它是有效的,但是C99规范提到某些实现可能会生成警告:
一个实现可能在许多情况下生成警告,但没有一个警告内容被指定为该国际标准的一部分。 以下是一些较常见的情况。
- 除了通过分配属于该类型成员的枚举常量,具有相同类型的枚举变量或返回相同枚举类型的函数的值( 6.7.2.2)。
我相信,在C枚举基本int
s的个性。 (这与它们是完全类型的C ++形成对比。)因此,分配不同的enum
实际上仍然仅与int
一起使用,因此是合法的。 但是,我并不是说建议这样做:)
它是有效的标准C,但不是一个好主意。 请注意,它不是有效的C ++。
有效-枚举是旨在帮助开发人员的语言功能。 如果您不指定枚举项目值,则它们的值会自动生成。 从另一种语言 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.