打印

变量定义用结构体有什么好处?

[复制链接]
12154|38
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hotpover|  楼主 | 2007-7-19 17:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
gtw| | 2007-7-19 19:05 | 只看该作者

空间上连续

编译时便于用指针优化

阅读程序时也方便

可以问问洪七

使用特权

评论回复
板凳
hotpover|  楼主 | 2007-7-19 19:45 | 只看该作者

哦,3q

使用特权

评论回复
地板
hotpover|  楼主 | 2007-7-19 20:50 | 只看该作者

那用union呢?

使用特权

评论回复
5
yuyixuanta| | 2007-7-19 21:53 | 只看该作者

你用一下会有体会的

使用特权

评论回复
6
zjf0000| | 2007-7-20 08:06 | 只看该作者

单片机程序建议不要用union

使用特权

评论回复
7
ayb_ice| | 2007-7-20 08:16 | 只看该作者

单片机程序建议不要用union?

谁建议的...

使用特权

评论回复
8
HWM| | 2007-7-20 08:39 | 只看该作者

LZ:“结构体”顾名思义

就是有利于帮助你以“结构化”的思路构建数据。

使用特权

评论回复
9
yewuyi| | 2007-7-20 09:33 | 只看该作者

6楼说的好奇怪!?

使用特权

评论回复
10
emailli| | 2007-7-20 09:42 | 只看该作者

6楼的话是有道理的

联合体和结构体一起使用的时候涉及大端小端的问题。

所以,如果不是很了解的话,尽量不要用。

当然了,如果已经很熟悉了,用了 也无妨。

使用特权

评论回复
11
yewuyi| | 2007-7-20 10:22 | 只看该作者

大端小端是个问题

但在MCU的C中,如果只是做BIT定义操作的话,不考虑它问题也不大

这和编译器有关系的了,所以尽量不要乱换编译器了……

使用特权

评论回复
12
leo305| | 2007-7-21 16:00 | 只看该作者

大端小端是什么概念啊?

    用union也有方便的地方,比如需将一个字节的内容的高8位和低8位分别取出时,用union就方便啦!

使用特权

评论回复
13
hotpover|  楼主 | 2007-7-21 17:19 | 只看该作者

请LS举个例子

使用特权

评论回复
14
yewuyi| | 2007-7-21 17:27 | 只看该作者

大端小端就是正着排还是反着来的问题

完全是编译器自己确定的,但一般的编译器都是正着排的……

使用特权

评论回复
15
high| | 2007-7-21 17:46 | 只看该作者

联合体

当多个基本数据类型或复合数据结构要占用同一片内存时,我们要使用联合体;

当多种类型,多个对象,多个事物只取其一时(“n选1”),我们也可以使用联合体来发挥其长处。

----个人感觉:
不过终极武器是“指针+强制类型转换”,用指针说明你考虑和理解了字节序(大小端)和字节对齐问题。

可读性对于新人会感觉稍微差一丁点。

使用特权

评论回复
16
Rightnow10| | 2007-7-21 19:58 | 只看该作者

hotpover?

hotpover 楼主假冒hotpower!!

使用特权

评论回复
17
gyt| | 2007-7-21 20:21 | 只看该作者

LS

楼上刚知道啊。哈~~~~~

使用特权

评论回复
18
hotpower| | 2007-7-22 00:56 | 只看该作者

最大的好处是便于管理~~~

由于工控实时记录的数据较多,而且要求在复位后也不能丢失数据.
在短时内是可以靠系统残余的电能支撑使RAM数据得以保持.

所以它和我们编写PC软件有很大的区别---全局变量较多.
如果使用单独的变量,那么分类很不明确.

再者就是变量名的管理,由于C语言和C++不同,C++的变量都封装在各自的类中,
名称相同的变量由于类名的不同也就自动区分出来了.

而C只能搞结构体了,这和无成员函数的C++结构或类是等同的.

这就是很多人包括俺喜欢结构的原因吧.

再就是联合了,它可以帮助你的工作,少费些脑浆~~~

例如:
    union
    {
        volatile unsigned char SystemFlag;
        struct
        {
            unsigned char MainExecFlag: 1;
            unsigned char EInt0ExecFlag: 1;
            unsigned char EInt1ExecFlag: 1;
            unsigned char Timer0ExecFlag: 1;
            unsigned char Timer1ExecFlag: 1;
            unsigned char Timer2ExecFlag: 1;
            unsigned char UartTxExecFlag: 1;
            unsigned char UartRxExecFlag: 1;
        };
    };

MainExecFlag=1;
等效为:
SystemFlag |= (1 << _MainExecFlag);//#define _MainExecFlag 0

UartRxExecFlag=0;
等效为:
SystemFlag &= ~(1 << _UartRxExecFlag);//#define _UartRxExecFlag 7


联合肯定方便些

使用特权

评论回复
19
HOTPOVER| | 2007-7-22 01:09 | 只看该作者

好!~~~第一次见菜农的文笔如此之工整!!

使用特权

评论回复
20
hotpower| | 2007-7-22 01:39 | 只看该作者

我倒~~~

使用特权

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

本版积分规则

431

主题

2397

帖子

1

粉丝