枚举类型到底有多大,占多少空间呢?这个要具体情况具体分析,编译器会视情况而定。
下面是我测试用的编译器版本。
gcc(Ubuntu7.5.0-3ubuntu1~18.04)7.5.0Copyright(C)FreeSoftwareFoundation,Inc.Thisisfreesoftware;seethesourceforcopyingconditions.ThereisNOwarranty;notevenforMERCHANTABILITYorFITNESSFORAPARTICULARPURPOSE.
当我写下这段代码的时候,实际的输出会是多少呢?
有人会说是1,有人会说是4,我最终运行的确实是4;
输出结果但是这个结果并不是唯一的,它取决于你的编译器,另外还取决于编译器参数,gcc这里有个编译器参数-fshort-enums,如果我们在编译的时候加上这个,那么编译出来是什么呢?
短枚举的输出结果最终结果变成了1
现在我在原先的代码中,加入CMD_MAX_16BIT=0xFFFF,下面看看输出结果是多少。
增带值范围运行输出结果如下:
输出结果是的,它变成了2。因此我们可以得出结论就是:
编译器将为枚举分配足够的内存大小,来保存我们所声明的任何值。所以,如果我们的代码中只使用低于(8位的范围是0~)的值,我们的枚举应该是8位宽,也就是一个字节,而后面的0xFFFF显然是16位,两个字节,所以最终输出为2
为此我参考了一下gccusermanual,如下;