Enum如何在C上分配内存?

我正在尝试使用C和Assembly(intelx8086)语言。

我也在使用一个class级,我的一个朋友给了我一个

typedef enum data_10 {a=0,b=7,c=10,} data_10_type; 

我想按比例使用这个类(AKA构造它/在Assembly上销毁它)。 我的问题是,“枚举”需要多少内存?

虽然它可能因编译器而异,但enum通常采用与int相同的大小。 但是,可以肯定的是,你总是可以使用sizeof( data_10_type );

你为什么不打印它?

 /* C99 */ #include  typedef enum { a = 0, b = 7, c = 10 } data_10_type; printf("%zu\n", sizeof(data_10_type)); 

枚举器列表中的标识符声明为具有int类型的常量( C11§6.7.2.2枚举说明符 ),因此sizeof(data_10_type)通常等于sizeof(int) ,但它不是必需的!

顺便说一句,如果你想要一个大小的位,只需使用CHAR_BIT常量(在定义),它表示单个字节中有多少位)。

 /* C99 */ #include  #include  typedef enum { a = 0, b = 7, c = 10 } data_10_type; printf("%zu\n", sizeof(data_10_type) * CHAR_BIT); 

枚举根本不会占用任何记忆; 编译器可以理解它,并且在编译期间使用正确的数字。 它是一个int,其大小取决于您的系统。