打印

MDk下枚举类型的大小原来这么特别

[复制链接]
10107|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xiepengchenghn|  楼主 | 2011-5-11 20:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
原来在STM32上用MDK,枚举量的大小是2字节,一直以为是4字节呢,不是说一般是和整形大小一样吗,MDK咋搞的这么特殊?特来请教下香主。
沙发
CC2530| | 2011-5-11 21:39 | 只看该作者
本帖最后由 CC2530 于 2011-5-12 07:25 编辑
原来在STM32上用MDK,枚举量的大小是2字节,一直以为是4字节呢,不是说一般是和整形大小一样吗,MDK咋搞的这么特殊?特来请教下香主。
xiepengchenghn 发表于 2011-5-11 20:48


标准C规定,enum占用存储空间与int一致。

但是大部分编译器都没有按标准来。

--------------------------------------------------
C语言标准并非如此,我自己理解错了。

使用特权

评论回复
板凳
xiepengchenghn|  楼主 | 2011-5-11 22:45 | 只看该作者
2# CC2530

标准C并没有这样规定:我在网上找了下,引用如下
“枚举类型的尺寸是以能够容纳最大枚举子的值的整数的尺寸”,
       同时标准中也说名了:“枚举类型中的枚举子的值必须要能够用一个int类型表述”,
       也就是说,枚举类型的尺寸不能够超过int类型的尺寸,但是是不是必须和int类型
       具有相同的尺寸呢?上面的标准已经说得很清楚了,只要能够容纳最大的枚举子的
       值的整数就可以了,那么就是说可以是char、short和int。”

同时自己又测试了下,发现MDK是可以根据枚举量的子值自动优化成占1,2,4字节。

使用特权

评论回复
地板
CC2530| | 2011-5-12 07:24 | 只看该作者
2# CC2530  

标准C并没有这样规定:我在网上找了下,引用如下
“枚举类型的尺寸是以能够容纳最大枚举子的值的整数的尺寸”,
       同时标准中也说名了:“枚举类型中的枚举子的值必须要能够用一个int类型表述” ...
xiepengchenghn 发表于 2011-5-11 22:45

多谢指正。

取看了下C标准,确实如楼上所说。

使用特权

评论回复
5
xiepengchenghn|  楼主 | 2011-5-12 08:32 | 只看该作者
4# CC2530

有C标准的书吗?

使用特权

评论回复
6
bobo5650| | 2011-5-12 10:24 | 只看该作者
我们以前声明Enum变量的时候,会特别要求声明一个Enum...Butt的枚举,用来限定变量长度的

使用特权

评论回复
7
xiepengchenghn|  楼主 | 2011-5-12 15:37 | 只看该作者
6# bobo5650

什么意思?不过MDK可以设置,指定编译成和int大小一样

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

267

帖子

1

粉丝