我正在尝试使用 C 和汇编(intelx8086)语言。
我也在使用一个由我的朋友实现的类。它有一个
typedef enum data_10 {a=0,b=7,c=10,} data_10_type;
我想按位使用这个类(AKA 在程序集中构造它/销毁它)。我的问题是,“枚举”需要多少内存?
尽管它可能因编译器而异,但enum
通常与int
. 不过可以肯定的是,您始终可以使用sizeof( data_10_type );
你为什么不打印它?
/* C99 */
#include <stdio.h>
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
常量(定义在 中<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);
枚举根本不占用任何内存。它被编译器理解,并且在编译过程中使用了正确的数字。它是一个 int,其大小取决于您的系统。