C语言中如何控制枚举类型占用空间的大小

2024-11-02 04:31:24
推荐回答(3个)
回答1:

在枚举类型后面设置对应的  :类型   即可。比如 enum cnum : char   (这里加上   :char)

#include 

enum cnum : char  // 加上   :char 则元素是 char 类型
{
    c_one, c_two, c_three
};

enum snum : short  // 加上   :short  则元素是 short 类型
{
    s_one, s_two, s_three
};

enum inum : int   // 加上   :int  则元素是 int 类型
{
    i_one, i_two, i_three
};

int main()
{
    printf("cnum: %d\nsnum: %d\ninum: %d\n",
           sizeof(cnum), sizeof(snum), sizeof(inum));
    return 0;
}

回答2:

标准C并没有明确规定枚举类型占用空间的大小,标准中只是说“枚举类型的尺寸是以能够容纳最大枚举子的值的整数的尺寸”,同时标准中也说明了:“枚举类型中的枚举子的值必须要能够用一个int类型表述”,也就是说,枚举类型的尺寸不能够超过int类型的尺寸,但是是不是必须和int类型具有相同的尺寸呢?上面的标准已经说得很清楚了,只要能够容纳最大的枚举子的
值的整数就可以了,那么就是说可以是char、short和int。”
不同的C编译器,对enum类型的大小作了不同的定义,而程序员是不能认为的修改枚举类型占用空间的。

回答3:

枚举类型所占大小有其基础类型决定,c语言中无法更改其基础类型,默认为int,所以是一个字的大小,32为是4个字节。C++中根据其定义的基础类型,大小有所不同:public enum TimeofDay:unsigned long
  {
  Morning,
  Afternoon,
  Evening
  } ;