欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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;
}
	

相关标签: C c语言 html5