在 [C] 中将 `enum` 强制转换为其他 `enum` 是否有效?

发布于 2024-10-21 09:47:11 字数 196 浏览 3 评论 0原文

我有两个枚举。

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

遗忘曾经 2024-10-28 09:47:11

根据标准它是有效的,但 C99 规范提到某些实现可能会生成警告:

实施可能会在许多情况下生成警告,但本国际标准中没有指定任何一种情况。以下是一些较常见的情况。

  • 将值赋予枚举类型的对象,而不是通过分配作为该类型成员的枚举常量、具有相同类型的枚举变量或返回相同类型的函数的值枚举类型(6.7.2.2)。

It's valid by the standard, but the C99 spec mentions that some implementations may generate a warning:

An implementation may generate warnings in many situations, none of which are specified as part of this International Standard. The following are a few of the more common situations.

  • A value is given to an object of an enumerated type other than by assignment of an enumeration constant that is a member of that type, or an enumeration variable that has the same type, or the value of a function that returns the same enumerated type (6.7.2.2).
岁月静好 2024-10-28 09:47:11

我相信在 C 中枚举基本上是具有个性的 int 。 (这与 C++ 形成鲜明对比,C++ 中它们是成熟的类型。)因此,分配不同的 enum 实际上仍然只是与 int 一起使用,因此它是合法的。不过,我并不是说建议这样做:)

I believe that in C enums are basically ints with personality. (This contrasts with C++ where they are full fledged types.) So, assigning different enums is effectively still just working with ints, so it is legal. However, I'm not saying this is recommended :)

陌伤ぢ 2024-10-28 09:47:11

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

It is valid Standard C but it's a bad idea. Note that it is not valid C++.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文