mljda 发表于 2007-12-15 18:12:18

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

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

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

typedef union        {
        DATA_COMM_HEAD_STRUCT head;
        unsigned char buf;
}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;\
                }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;\
                }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);

xingcn 发表于 2007-12-15 20:19:04

一般情况下我是使用类型强制转换,这样就不用定义联合体了。

tsb0574 发表于 2007-12-15 21:30:12

抽象指针强制转化!!

tywood 发表于 2008-1-26 17:39:22

第一种方法比较正规
页: [1]
查看完整版本: [请教]利用#define 等宏实现(自动)变量类型批量定义(typedef)的实现。