在 [C] 中将 `enum` 强制转换为其他 `enum` 是否有效?
我有两个枚举。
enum A { A1=1, A2=2 }
enum B { B1=1, B2=2 }
按照 C 的标准,这有效吗?
A a = A1;
B b = a;
(用 Clang 编译得很好,但我不确定这是标准行为还是扩展行为)
I have two enums.
enum A { A1=1, A2=2 }
enum B { B1=1, B2=2 }
Is this valid by standard of C?
A a = A1;
B b = a;
(compiled well with Clang, but I can't sure this is standard or extension behavior)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
根据标准它是有效的,但 C99 规范提到某些实现可能会生成警告:
It's valid by the standard, but the C99 spec mentions that some implementations may generate a warning:
我相信在 C 中枚举基本上是具有个性的 int 。 (这与 C++ 形成鲜明对比,C++ 中它们是成熟的类型。)因此,分配不同的
enum
实际上仍然只是与int
一起使用,因此它是合法的。不过,我并不是说建议这样做:)I believe that in C enums are basically
int
s with personality. (This contrasts with C++ where they are full fledged types.) So, assigning differentenum
s is effectively still just working withint
s, so it is legal. However, I'm not saying this is recommended :)它是有效的标准 C,但这是一个坏主意。请注意,它不是有效的 C++。
It is valid Standard C but it's a bad idea. Note that it is not valid C++.