簡體   English   中英

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

[英]What does this means in C? AB->CD->Func(param)

好吧,讓我解釋一下。 我有一個指針來構造ABstruct1結構內部有一個指針到另一個名為結構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)的定義,也找不到它的作用。

您所說的“一些函數的原型,包括Func(param) ”是一個函數指針 您可以調用指針指向的函數,就像指針代表該函數的名稱一樣。 最里面的結構已經建立了指向某個函數的指針。 您的代碼段通過其指針調用該函數。

這是一個簡短的示例,說明了它是如何工作的( 也適用於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;
}

它使用這些參數調用結構struct2的函數Func()

函數Func()是指向函數的指針,是組成函數的指令的起始指針(內存地址)。

請參見C中的函數指針如何工作? 進行解釋。

作為變量的指針必須在用於調用之前進行設置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM