C语言中宏定义初始化结构体
程序员文章站
2022-07-07 19:30:43
...
在对结构体对象定义和初始化中,可以通过使用宏来快速达成结构,在使用过程中,应该注意宏参数名和结构体的成员名的冲突问题,宏参数名和结构体的成员名不能相同。
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};
fmsg_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;
}
上一篇: 社交电商“花生日记”涉嫌传销被罚千万