c#发展

注册

 

发新话题 回复该主题

难倒高手了,C语言枚举end的作用是什么 [复制链接]

1#
我在某乎上看到这个问题,一开始,也有一些疑惑,后面查了一些资料,对于这个问题,简单的说一下我的看法。枚举有多大

枚举类型到底有多大,占多少空间呢?这个要具体情况具体分析,编译器会视情况而定。

下面是我测试用的编译器版本。

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,如下;

分享 转发
TOP
发新话题 回复该主题