这在C中意味着什么? AB-> CD-> Func键(PARAM)

时间:2012-10-26 21:30:33

标签: c

好的,让我解释一下。我在结构中有一个指向结构AB类型struct1的指针,指针指向CD类型struct2的另一个结构,struct2的定义有函数的一些原型包括Func(param)。如果有人能帮我理解一点,我会非常感激。


是的,代码是针对微控制器中的USB主机而我没有添加代码,因为它可以解决问题,但现在就是,

电话是:

void USBHOST_Process(USB_OTG_CORE_HANDLE *pdev , USBH_HOST *phost){
    ...
    if (phost->usr_cb->UserInput() == USBH_USR_RESP_OK){
    ...
    }
    ...
}


typedef struct _Host_TypeDef
{
  HOST_State            gState;       /*  Host State Machine Value */
  HOST_State            gStateBkp;    /* backup of previous State machine value */
  ENUM_State            EnumState;    /* Enumeration state Machine */
  CMD_State             RequestState;       
  USBH_Ctrl_TypeDef     Control;

  USBH_Device_TypeDef   device_prop; 

  USBH_Class_cb_TypeDef               *class_cb;  
  USBH_Usr_cb_TypeDef                 *usr_cb;


} USBH_HOST, *pUSBH_HOST;


typedef struct _USBH_USR_PROP
{
  void (*Init)(void);       /* HostLibInitialized */
  void (*DeInit)(void);       /* HostLibInitialized */  
  void (*DeviceAttached)(void);           /* DeviceAttached */
  void (*ResetDevice)(void);
  void (*DeviceDisconnected)(void); 
  void (*OverCurrentDetected)(void);  
  void (*DeviceSpeedDetected)(uint8_t DeviceSpeed);          /* DeviceSpeed */
  void (*DeviceDescAvailable)(void *);    /* DeviceDescriptor is available */
  void (*DeviceAddressAssigned)(void);  /* Address is assigned to USB Device */
  void (*ConfigurationDescAvailable)(USBH_CfgDesc_TypeDef *,
                                     USBH_InterfaceDesc_TypeDef *,
                                     USBH_EpDesc_TypeDef *); 
  /* Configuration Descriptor available */
  void (*ManufacturerString)(void *);     /* ManufacturerString*/
  void (*ProductString)(void *);          /* ProductString*/
  void (*SerialNumString)(void *);        /* SerialNubString*/
  void (*EnumerationDone)(void);           /* Enumeration finished */
  USBH_USR_Status (*UserInput)(void);
  int  (*UserApplication) (void);
  void (*DeviceNotSupported)(void); /* Device is not supported*/
  void (*UnrecoveredError)(void);

}
USBH_Usr_cb_TypeDef;

现在我理解它的作用,但我找不到UserInput的定义(void)我找不到它的作用。

2 个答案:

答案 0 :(得分:3)

你所说的“包括Func(param)在内的函数的某些原型”是function pointer。您可以调用指针指向的函数,就好像指针表示该函数的名称一样。最内层的结构已经设置了一个指向某个功能的指针;你的代码片段通过它的指针调用该函数。

以下是一个简短示例,说明了其工作原理(also on ideone):

#include <stdio.h>

typedef struct {
    void (*func)(int);  
} with_fp;

void test(int n) {
    printf("Test %d\n", n);
}

int main(void) {
    with_fp s = {.func = test};
    with_fp *ptr = &s;
    ptr->func(123);
    return 0;
}

答案 1 :(得分:1)

它使用这些参数调用结构Func()的函数struct2

函数Func()是指向函数的指针,指针(存储器地址),组成函数的指令开始。

有关解释,请参阅How do function pointers in C work?

作为变量的指针必须在用于调用之前设置。