合泰C语言联合体的问题

[复制链接]
4973|20
 楼主| chen3bing 发表于 2010-4-14 09:02 | 显示全部楼层 |阅读模式
我定义了一个联合体:
union xy
{uint y;
uchar x[2];
}ccb3;
然后赋值:ccb3.y=0x1234;
用ccb3.x[0],ccb3.x[1]分解开来显示
结果显示0034.
而直接给ccb3.x[0]和ccb3.x[1]赋值就可以正常显示。
请问高手,怎么回事?如何解决?
谢谢!
 楼主| chen3bing 发表于 2010-4-14 09:48 | 显示全部楼层
高手支招啊!
winhi 发表于 2010-4-15 14:38 | 显示全部楼层
结果是用何语句显示的?
还是直接查看变量?
xsgy123 发表于 2010-4-15 20:41 | 显示全部楼层
直接查看变量
zwll 发表于 2010-4-15 21:12 | 显示全部楼层
看不懂……
 楼主| chen3bing 发表于 2010-4-16 10:17 | 显示全部楼层
在另外一个论坛的高手说,如果编译器不是增强型的,int是作为字节型对待的。
sinadz 发表于 2010-4-18 21:13 | 显示全部楼层
LS意思不太懂
yybj 发表于 2010-4-19 21:33 | 显示全部楼层
也不是很懂
txcy 发表于 2010-4-19 22:06 | 显示全部楼层
int的类型还和编译器有关系?
linjing 发表于 2010-4-19 22:23 | 显示全部楼层
嵌入式的系统里尽量还是少用联合体,会吃大亏的!俺就吃过这亏,程序出问题了没地找去

建议看看有关MISRA方面的资料
linjing 发表于 2010-4-19 22:30 | 显示全部楼层
int 类型确实是和编译器有关滴!

不过确实没听说过有8位的int,比如51的Keil int是16位, ARM一般是32位的,如果是64位的系统,也很有可能是64位的

具体可以用sizeof(int)测试一下,或者查编译器的手册
djyos 发表于 2010-4-19 22:40 | 显示全部楼层
你用得是纯16位或者32位cpu,这种cpu中char是16位或者32位的,int也是。
但在取char型数据时,编译器会产生代码清除掉高8位(24位)。
可以去我的主页下载我的书,第16章有说明的。
winhi 发表于 2010-4-20 11:10 | 显示全部楼层
HOLTEK 的C编译器确实存在不同版本间的问题,7.0以前的版本,整型数为单字节的,8位。7.0以后的整型应该是16位的
dfsa 发表于 2010-4-20 20:31 | 显示全部楼层
哦,还会有这样的问题,以前确实不知道
pkat 发表于 2010-4-20 21:07 | 显示全部楼层
确实和编译器有关,也遇到过
gxgclg 发表于 2010-4-22 21:27 | 显示全部楼层
那怎么解决
 楼主| chen3bing 发表于 2010-4-23 07:50 | 显示全部楼层
定义成长整型的唠。
xsgy123 发表于 2010-4-23 20:24 | 显示全部楼层
嵌入式系统少用联合体,为何?
hsbjb 发表于 2010-4-23 20:52 | 显示全部楼层
我对楼主要表达的意思读的不是很懂,读了一遍,迷糊
sinadz 发表于 2010-4-23 21:40 | 显示全部楼层
联合体有个好处就是节省RAM,为什么ARM不能用这种结构呢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

439

主题

2540

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部