数据结构框架设计
// 定义一个通用的头部结构体
typedef struct {
uint16_t type; // 数据类型字段,用于区分不同的数据结构
uint16_t length; // 数据长度字段
// 其他可能的共同字段
} CommonHeader;
// 定义一个包含匿名结构体的通用数据结构
typedef struct {
CommonHeader header;
union {
struct {
// 具体类型1的数据结构
uint32_t data1;
uint32_t data2;
} type1;
struct {
// 具体类型2的数据结构
uint16_t data3;
char data4[100];
} type2;
// 可以继续添加其他类型的匿名结构体
};
} ProtocolData;
设计思路
- 通用头部:首先定义一个
CommonHeader
结构体,用于存放多种数据结构共同的字段,如数据类型type
和数据长度length
,这样在处理不同类型数据时,可以通过头部信息快速区分和进行一些通用的操作。
- 匿名结构体的联合:在
ProtocolData
结构体中,使用联合(union
)来包含不同类型的匿名结构体。联合的特性使得在同一时间只有一个匿名结构体占用内存空间,节省了内存。每个匿名结构体对应一种具体的数据类型,根据header.type
的值来确定当前使用的是哪种具体的数据结构。
优势
- 代码简洁:通过匿名结构体和联合的使用,避免了为每种数据类型单独定义结构体,使代码结构更加紧凑和简洁,易于维护。
- 内存高效:联合的使用确保不同的数据结构不会同时占用内存,在处理多种数据类型但每次仅处理一种类型数据的场景下,有效节省了内存空间。
- 扩展性强:如果需要添加新的数据类型,只需在联合中添加对应的匿名结构体,并在处理逻辑中增加对新类型的判断和处理,无需对整体数据结构框架进行大规模修改。