以下C代码做了什么,= {}

时间:2015-11-13 02:54:45

标签: c struct typedef assignment-operator

以下代码包含在用于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
};

2 个答案:

答案 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虽然......