[请教]利用#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); 一般情况下我是使用类型强制转换,这样就不用定义联合体了。 抽象指针强制转化!! 第一种方法比较正规
页:
[1]