【发布时间】:2016-02-03 23:38:55
【问题描述】:
引用维基百科关于enumerated types 的文章将是这个问题的最佳开场白:
换句话说,枚举类型具有彼此不同的值,并且可以比较和分配,但程序员未指定 具有任何特定的具体计算机内存中的表示;编译器和解释器可以任意表示它们。
虽然我了解枚举的定义和用途,但我还不能掌握枚举和内存之间的交互——当声明枚举类型而不创建枚举类型变量的实例时,是类型定义作为联合还是结构存储在内存中?前面提到的 Wiki 摘录背后的含义是什么?
【问题讨论】:
-
我对枚举的看法是它们只存在于编译时间之前(无论如何在 c 中)。即它们在编译时替换为它们的整数值
-
表示和实现在不同的编程语言中可能会有很大的不同。当您询问 C 时,请阅读 C
enums。 -
基本上是说如果你有一个枚举变量,编译器可以选择任何适合其需要的底层基本类型在内存中表示它。给定
enum Xyz { ABC, DEF, GHI };,C 程序员(实际上是一般程序员)无法控制用于存储enum Xyz值的内存类型。在 C 语言中,它可以是char或short或int或编译器随意选择的其他类型——当然,除非有一个 ABI(应用程序二进制接口)定义了编译器必须做什么。 -
还有一个声明 从不分配内存。不要将其与定义混淆
-
在不创建变量的情况下,诸如 ABC 之类的值可能只是汇编指令的一部分,或者它可能存储在某个地方——可能在文本段中,因为它的值在程序运行时不会改变.