C语⾔中宏定义初始化结构体
在对结构体对象定义和初始化中,可以通过使⽤宏来快速达成结构,在使⽤过程中,应该注意宏参数名和结构体的成员名的冲突问题,宏参数名和结构体的成员名不能相同。
typedef struct IIC_msg{
int addr;
int len;
char *msg;
}fmsg_t;
#define I2C1_ADDR 0x65
#define I2C2_ADDR 0x35
#define SIZE(arr) sizeof(arr)/sizeof(arr[0])
#define I2C_CONFIG1(mlen,mbuf) {  \
.addr = I2C1_ADDR,                \
.len = (mlen),              \
.msg = (mbuf),              \
}
#define I2C_CONFIG2(T_I2C,maddr,mlen,mbuf) \
fmsg_t T_I2C = {.addr = (maddr), .len = (mlen), .msg = (mbuf) }
void define_sample(void)
{
char buff[6] = {1,2,3,4,5,6};
c语言中structfmsg_t msg1 = I2C_CONFIG1(SIZE(buff),buff);
I2C_CONFIG2(msg2,I2C2_ADDR,SIZE(buff),buff);
printf("msg1 addr:0x%x\n",msg1.addr);
printf("msg1  len:%d\n",msg1.len);
printf("msg1  msg:%d\n",msg1.msg[0]);
printf("msg2 addr:0x%x\n",msg2.addr);
printf("msg2  len:%d\n",msg2.len);
printf("msg2  msg:%d\n",msg2.msg[0]);
}
int main()
{
define_sample();
return 0;
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。