【发布时间】:2020-06-17 20:21:22
【问题描述】:
enum 是用户定义的类型。一般来说,C 和 C++ 中的 enum 之间没有太大区别。除了 C++ 中的范围:如果在函数或类中声明了某些 enum,则不能在声明的函数/类之外访问它。这不适用于 C。
声明没有区别。
例如,可以如下声明新的enum(对于 C 和 C++):
enum newEnum { zero = 0, one, two, three };
定义新变量几乎没有区别。 要使用新定义的类型定义新变量,可以使用以下行:
enum newEnum varA = zero; // though allowed to skip enum keyword in C++
但是有一点很有趣。
在 C++ 中,您不能添加两个 enum 值并将结果分配给 enum-type 变量:
varA = one + zero; // won't compile in c++
这是可以解释的:enum 值可以转换为 int 值,但反之则不行(int 到 enum)。因此,在最后一个示例中,编译器无法将 sum 的结果(类型为 int)分配给 varA(enumnewEnum),因为它无法将 int 转换为 newEnum。
但是在 C 中是可能的:最后一行代码编译成功。这让我很困惑。
因此出现了一个问题:C 编译器如何处理enum?它甚至不是它的自定义类型吗?只是int吗?
【问题讨论】:
-
C 根本无法保护您免受自己的伤害。
-
枚举数在 C 中具有
int类型。 (枚举类型依然存在,只是枚举数没有那个类型) -
在 C 中,
enum更像是 typedef。