5

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

我也在使用一个由我的朋友实现的类。它有一个

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

我想按位使用这个类(AKA 在程序集中构造它/销毁它)。我的问题是,“枚举”需要多少内存?

4

3 回答 3

6

尽管它可能因编译器而异,但enum通常与int. 不过可以肯定的是,您始终可以使用sizeof( data_10_type );

于 2012-09-04T15:47:31.057 回答
2

你为什么不打印它?

/* C99 */
#include <stdio.h>

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

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

顺便说一句,如果您想以位为单位,只需使用CHAR_BIT常量(定义在 中<limits.h>),它表示单个字节中有多少位)。

/* C99 */
#include <limits.h>
#include <stdio.h>

typedef enum { a = 0, b = 7, c = 10 } data_10_type;
printf("%zu\n", sizeof(data_10_type) * CHAR_BIT);
于 2012-09-04T15:47:10.400 回答
1

枚举根本不占用任何内存。它被编译器理解,并且在编译过程中使用了正确的数字。它是一个 int,其大小取决于您的系统。

于 2012-09-04T15:47:04.737 回答