访问typedef结构的数组

时间:2014-03-19 07:11:27

标签: c embedded microcontroller

大家好我正在开发基于Microchip的PIC32MX打印机主机示例,其中我在程序中找到了以下代码,以找出使用以下if循环的客户端驱动程序。我无法理解执行循环,

我想知道if循环如何返回1或0,我在usb_client_init函数指针的类型def卡住了,我也不明白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 

  }

}

    }

1 个答案:

答案 0 :(得分:0)

看起来你从struct _CLIENT_DRIVER_TABLE删除了两行。还应该有EventHandlerflags

第一个typedef声明USB_CLIENT_INIT是一个指向一个函数的指针,该函数接受3个变量并返回一个bool。 (您缺少类似的事件处理程序声明。)

下一个typedef声明表的一行。它应该有三个部分,但是你的部分只剩下Initialize部分,这是USB_CLIENT_INIT类型的函数指针。

接下来,声明其中两个条目的数组。 {}表示这两个条目应该包含三个部分,而不仅仅是一个部分。

最后,您使用此数组。

usbClientDrvTable[0]是数组的第一个元素。

usbClientDrvTable[0].Initialize是第一个结构中的函数指针。 (它被定义为USBHostPrinterInitialize。)

usbClientDrvTable[0].Initialize(a,b,c)是将该函数应用于值a,b和c的布尔结果。这与USBHostPrinterInitialize(a,b,c)相同。