打印

出道自己突然想到的问题(应用有此需要)

[复制链接]
4320|22
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ayb_ice|  楼主 | 2012-3-10 10:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
SLEET1986| | 2012-3-10 10:58 | 只看该作者
test.u8[0] = 0x12;
test.u8[1] = 0;
test.u16 = 0x12;

使用特权

评论回复
板凳
NE5532| | 2012-3-10 11:01 | 只看该作者
没想通楼主为啥想不出来。

使用特权

评论回复
地板
chenczy| | 2012-3-10 11:20 | 只看该作者
结构体和数组

使用特权

评论回复
5
yewuyi| | 2012-3-10 11:34 | 只看该作者
LZ是否在担心高位在前还是低位在前?

使用特权

评论回复
6
ayb_ice|  楼主 | 2012-3-10 11:38 | 只看该作者
这个问题对于大端和小端是不同的

使用特权

评论回复
7
ayb_ice|  楼主 | 2012-3-10 11:41 | 只看该作者
没想通楼主为啥想不出来。
NE5532 发表于 2012-3-10 11:01
我本来是想完成仅对指定的变量进行初始化,且联合实际很复杂(比如多重结构,前后顺序颠倒,大小不一致等),这里演示的很简单

使用特权

评论回复
8
knliao| | 2012-3-10 11:45 | 只看该作者
要考虑大小端的问题。还要看编译器条件和处理器情况。

使用特权

评论回复
9
ayb_ice|  楼主 | 2012-3-10 11:46 | 只看该作者
得出一个结论,不知是否正确
对于联合变量进行定义+初始化,只能初始化联合的第一个变量(包含结构体等)

使用特权

评论回复
10
mohanwei| | 2012-3-10 11:54 | 只看该作者
我的习惯是在需要存储的大型结构体最后面加个CRC32,存储、读出、传输时两边各算各的,正确后再接着判断校验一些重要的值。
系统硬件可靠的话运行起来就没太大作用了,但起码在开发调试时可以顺利很多

使用特权

评论回复
11
mohanwei| | 2012-3-10 11:55 | 只看该作者
传入的参数也都assert一下,反正发行时会自动屏蔽掉

使用特权

评论回复
12
原野之狼| | 2012-3-10 12:53 | 只看该作者
在结构体里搞个type变量

使用特权

评论回复
13
sunhq02| | 2012-3-10 13:29 | 只看该作者
这个需要看你的编译环境是 大端在先还是小端在先
如果不清楚的话, 可以简单的试一下

使用特权

评论回复
14
coody| | 2012-3-10 18:35 | 只看该作者
软仿真马上看到结果

使用特权

评论回复
15
liujy124| | 2012-3-11 19:59 | 只看该作者
联合体,呵呵,同用一段空间···

使用特权

评论回复
16
ayb_ice|  楼主 | 2012-3-19 11:47 | 只看该作者
我在9L的结果是正确的
以前真不知道这个规定,大部分的书都没有讲到这个

使用特权

评论回复
17
coody| | 2012-3-19 17:39 | 只看该作者
不就是联合嘛,基本C语言都有详细说明,实际要看编译器的大小端

使用特权

评论回复
18
ayb_ice|  楼主 | 2012-3-20 08:28 | 只看该作者
不就是联合嘛,基本C语言都有详细说明,实际要看编译器的大小端
coody 发表于 2012-3-19 17:39
是怎样对联合进行定义时的初始化

使用特权

评论回复
19
ayb_ice|  楼主 | 2012-3-20 08:33 | 只看该作者
typedef union{
        struct{
                unsigned char x;
                unsigned int y;
                unsigned char z;
        }st;
       
        int w;
}t_UN1;

typedef union{
        int w;

        struct{
                unsigned char x;
                unsigned int y;
                unsigned char z;
        }st;
       
}t_UN2;


如果只想对其中的y成员初始化为1,请问以下应该怎么写(KEIL C51)

t_UN1 un1 = {xxxx};
t_UN2 un2 = {xxxx};

使用特权

评论回复
20
sedatefire| | 2012-7-9 16:43 | 只看该作者
这个问题对于大端和小端是不同的
ayb_ice 发表于 2012-3-10 11:38

没错,关键看大小端啊

使用特权

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

本版积分规则

222

主题

15461

帖子

34

粉丝