结构体定义嵌套定义
typedef struct
{GPIO_TypeDef *CTRL; // 转换控制端口struct {uint32_t Channel;} WCH[2]; // 写端口TIM通道struct {void (*DMA_ClearFlag_TC)(DMA_TypeDef *DMAx);} RCH; // 读端口TIM通道
} AD4858_IOMap_TypeDef;
如上面的定义,
优点:
不必要在外部定义其他的结构体声明,更符合面向对象的设计思想。减少耦合性。
逻辑清晰,分组明确
减少命名冲突
缺点:增加编译器负担
可能导致误解
对于不熟悉这种嵌套结构体的开发者来说,可能会对代码的理解产生困难。例如,他们可能会误以为 WCH 和 RCH 是独立的结构体,而不是嵌套在 AD4858_IOMap_TypeDef 中的字段。
不支持直接初始化
在C语言中,嵌套结构体不能直接初始化。例如:
AD4858_IOMap_TypeDef myMap = {.CTRL = GPIOA,.WCH[0].Channel = 1, // 错误:不能直接初始化嵌套结构体的字段
};
这种初始化方式会导致编译错误。需要通过逐层赋值来完成初始化:
AD4858_IOMap_TypeDef myMap;
myMap.CTRL = GPIOA;
myMap.WCH[0].Channel = 1;