以下代码包含在用于USB驱动程序的STMicroelectronics C代码中。 我试图遵循(理解)这是如何工作的,我承认我的C编程并不强大。
我的问题是/是什么
USBD_Interface_fops_FS =
{ xxxxx }
???
我找不到K& R,其中“=”赋值运算符用于类似示例。
typedef struct _USBD_CDC_Itf
{
int8_t (* Init) (void);
int8_t (* DeInit) (void);
int8_t (* Control) (uint8_t, uint8_t * , uint16_t);
int8_t (* Receive) (uint8_t *, uint32_t *);
}USBD_CDC_ItfTypeDef;
static int8_t CDC_Init_FS (void);
static int8_t CDC_DeInit_FS (void);
static int8_t CDC_Control_FS (uint8_t cmd, uint8_t* pbuf, uint16_t length);
static int8_t CDC_Receive_FS (uint8_t* pbuf, uint32_t *Len);
USBD_CDC_ItfTypeDef USBD_Interface_fops_FS =
{
CDC_Init_FS,
CDC_DeInit_FS,
CDC_Control_FS,
CDC_Receive_FS
};
答案 0 :(得分:2)
这是struct initializer syntax。它只是将结构中的四个函数指针设置为四个命名函数。
答案 1 :(得分:2)
结构初始化。
此:
USBD_CDC_ItfTypeDef USBD_Interface_fops_FS =
{
CDC_Init_FS,
CDC_DeInit_FS,
CDC_Control_FS,
CDC_Receive_FS
};
只是一种更有效的方法:
USBD_CDC_ItfTypeDef USBD_Interface_fops_FS;
USBD_Interface_fops_FS.Init = CDC_Init_FS;
USBD_Interface_fops_FS.DeInit = CDC_DeInit_FS;
USBD_Interface_fops_FS.Control = CDC_Control_FS;
USBD_Interface_fops_FS.Receive = CDC_Receive_FS;
我确信自从ANSI C 89开始就存在这种情况。我不知道它们是否在K& K中有结构初始化。 R虽然......