[英]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.