好的,让我解释一下。我在结构中有一个指向结构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)我找不到它的作用。
答案 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?。
作为变量的指针必须在用于调用之前设置。