搜索
bottom↓
回复: 3

[请教]利用#define 等宏实现(自动)变量类型批量定义(typedef)的实现。

[复制链接]

出0入0汤圆

发表于 2007-12-15 18:12:18 | 显示全部楼层 |阅读模式
问题的产生。由于设置变来那个等。等已成结构体能很方便赋值,但是在串口发送中需要以字节型数组发送。所以需要构建共同体。但是设置种类多。所以需求一种便捷的(自动)生成新typedef的方法。typedef定义以后,可以采程序中方便使用sizeof()来取得数据长度。

-------------------------------方法一------------------------------------
typedef struct {
        unsigned char DA;
        unsigned char SA;
        unsigned char MCT;
        unsigned char SCT;
        unsigned char RKE[11];
        unsigned char DC;
}DATA_COMM_HEAD_STRUCT;

typedef union        {
        DATA_COMM_HEAD_STRUCT head;
        unsigned char buf[sizeof(DATA_COMM_HEAD_STRUCT)];
}DATA_COMM_HEAD_UNION;\
应用一
【可以作为程序输入和返回类型】
void(DATA_COMM_HEAD_UNION cc);
DATA_COMM_HEAD_UNION xxx;
xxx.head.DC
xxx.buf
----------------------------方法二----------------------------------
/* 宏自动变量定义,结构体构建成字节行共同体 */
#define UNION_BUF(type,name)\
                union {\
                        type item;\
                        unsigned char buf[sizeof(type)];\
                }name;

typedef struct {
        unsigned int PCE;
        unsigned int CRT;
        unsigned int IQM;
}PRE_CHARGE_STRUCT;
应用二
【只能定义变量,不做函数传递】
UNION_BUF(PRE_CHARGE_STRUCT,xx);
sizeof(PRE_CHARGE_STRUCT);
xx.item.PCE
xx.buf
-------------------------方法三------
#define UNION(type,name)\
        typedef        union {\
                        type item;\
                        unsigned char buf[sizeof(type)];\
                }name;

typedef struct {
        unsigned int PCE;
        unsigned int CRT;
        unsigned int IQM;
}PRE_CHARGE_STRUCT;
UNION(PRE_CHARGE_STRUCT,PRE_CHARGE_UNION);//要在结构体类型后使用

应用三【也可以做函数传递】
PRE_CHARGE_UNION x;
sizeof(PRE_CHARGE_UNION)
x.item.PCE
x.buf
void h(PRE_CHARGE_UNION y);

出0入0汤圆

发表于 2007-12-15 20:19:04 | 显示全部楼层
一般情况下我是使用类型强制转换,这样就不用定义联合体了。

出0入0汤圆

发表于 2007-12-15 21:30:12 | 显示全部楼层
抽象指针强制转化!!

出0入0汤圆

发表于 2008-1-26 17:39:22 | 显示全部楼层
第一种方法比较正规
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-20 01:04

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表