最近看到一种枚举、宏定义、结构体联合的应用,对我这种初学者很有帮助,所以总结一下记录在这,为以后方便查阅,有需要的朋友也可以做一个参考.
实际操作就是用宏定义初始化接头体具体操作代码如下:
#include<stdio.h>
#include<stdlib.h>
#include<fcntl.h>
#include<string.h>
typedef enum
{
date_head = 0x20,
byt_second = 0x0,
byt_third = 0x0,
byt_forth = 0x0,
dest_addr_high = 0xff,
dest_addr_low = 0xff,
pck_len = 0x17,
date_cmd = 0x91
}Led_TypeDef;
我用枚举做了一个数据包格式
#define DATA_INIT_DEFAULT \
{\
date_head,\
byt_second,\
byt_third,\
byt_forth,\
dest_addr_high,\
dest_addr_low,\
pck_len,\
date_cmd\
}
然后把枚举做一个宏定义
typedef struct _LedControlPackage_t
{
unsigned char data_header;
unsigned char byte_second;
unsigned char byte_third;
unsigned char byte_forth;
unsigned char destination_addr_high;
unsigned char destination_addr_low;
unsigned char package_len;
unsigned char cmd;
}LedControlPackage;
做一个结构体数据包
int main()
{
LedControlPackage init = DATA_INIT_DEFAUL;//用宏定义初始化结构体
printf("%d \n",init.data_header);
printf("%d \n",init.byte_second);
printf("%d \n",init.byte_third);
printf("%d \n",init.byte_forth);
}
用宏定义初始化结构体,这里面需要注意的几个地方:
1.宏定义的时候需要注意续行符号别丢掉
2.初始化的时候,要 LedControlPackage init = DATA_INIT_DEFAUL;
不要LedControlPackage init;
init = DATA_INIT_DEFAUL;
3.如果初始化的项目比实际结构体中的项目少,那么结构体中多余的项目默认初始化为0;