[英]Accessing an array of typedef struct
嗨,大家好,我正在為打印機主機開發基於Microchip的PIC32MX的示例,其中遇到了以下程序中的以下代碼,以找出要使用的客戶端驅動程序(如果使用了循環)。我無法理解循環的執行,
我想知道if循環如何返回1或0,我被困在def類型為usb_client_init函數指針,而且我也不了解CLIENT_DRIVER_TABLE usbClientDrvTable []數組的工作方式,它如何決定使用哪個函數。 初始化.operator應該調用指針函數* USB_CLIENT_INIT,但是它們不是USB_CLIENT_INIT的定義,只能被聲明。
typedef BOOL (*USB_CLIENT_INIT) (BYTE, DWORD ,BYTE);
typedef struct _CLIENT_DRIVER_TABLE {
USB_CLIENT_INIT Initialize; // Initialization routine
} CLIENT_DRIVER_TABLE;
CLIENT_DRIVER_TABLE usbClientDrvTable[] = {
{
USBHostPrinterInitialize, // It is a function
USBHostPrinterEventHandler, // It is a function
0
},
{ USBHostPrinterInitialize, // It is a function
USBHostPrinterEventHandler, // It is a function
1
}
};
void main()
{
while(1)
{
char temp=0;
if( !usbClientDrvTable[temp].Initialize(a,b,c))
{
//do something
}
}
}
好像您從struct _CLIENT_DRIVER_TABLE
刪除了兩行。 也應該有EventHandler
和flags
。
第一個typedef聲明USB_CLIENT_INIT
為指向具有3個變量並返回布爾值的函數的指針。 (您缺少事件處理程序的類似聲明。)
下一個typedef聲明表的一行。 它應該包含三部分,但是您剩下的只有Initialize
部分,這是USB_CLIENT_INIT
類型的函數指針。
接下來,聲明其中兩個條目的數組。 {
和}
表示這兩個條目應包含三個部分,而不僅僅是一個部分。
最后,使用此數組。
usbClientDrvTable[0]
是數組的第一個元素。
usbClientDrvTable[0].Initialize
是第一個結構中的函數指針。 (已定義為USBHostPrinterInitialize
。)
usbClientDrvTable[0].Initialize(a,b,c)
是將該函數應用於值a,b和c的布爾結果。 這與USBHostPrinterInitialize(a,b,c)
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.