C代码问题请教,结构体怎么能执行呢?

2019-07-21 01:45发布

本帖最后由 EDA3rd 于 2017-8-15 00:19 编辑

结构体怎么能执行呢?

    static USB_ClassInfo_HID_Host_t Keyboard_HID_Interface = {
        .Config = {
            .DataINPipeNumber       = 1,
            .DataINPipeDoubleBank   = false,

            .DataOUTPipeNumber      = 2,
            .DataOUTPipeDoubleBank  = false,

            .HIDInterfaceProtocol   = HID_CSCP_KeyboardBootProtocol,
            .PortNumber = 0,
        },
    };
    static inline void HID_Host_USBTask(USB_ClassInfo_HID_Host_t* const HIDInterfaceInfo) ATTR_NON_NULL_PTR_ARG(1);
    static inline void HID_Host_USBTask(USB_ClassInfo_HID_Host_t* const HIDInterfaceInfo)
    {
        (void)HIDInterfaceInfo;
    }

    int main(void)
    {
        SetupHardware();
        DEBUGOUT("Keyboard Host Demo running. ");

        for (;; ) {
            KeyboardHost_Task();

            HID_Host_USBTask(&Keyboard_HID_Interface);
            USB_USBTask(Keyboard_HID_Interface.Config.PortNumber, USB_MODE_Host);
        }
    }

注意 HID_Host_USBTask(&Keyboard_HID_Interface); 这句代码,传递参数是结构体指针,执行 HID_Host_USBTask 就等于执行  (void) &Keyboard_HID_Interface; 不会跑飞吗?事实上板子运行没出现什么问题


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
7条回答
csmjmcc
2019-07-21 08:05
对你的问题很感兴趣,特意下载了源程序,编译了下,结果我将其改成:
int main(void)
{
        char *pp = NULL;  //这里添加

        SetupHardware();

        DEBUGOUT("Keyboard Host Demo running. ");

        for (;; ) {
                KeyboardHost_Task();

                //HID_Host_USBTask(&Keyboard_HID_Interface);
                (void)pp;                                                                        //这里添加
                USB_USBTask(Keyboard_HID_Interface.Config.PortNumber, USB_MODE_Host);
        }
}

1、无论屏蔽或不屏蔽HID_Host_USBTask(&Keyboard_HID_Interface);和 (void)pp; 编译后代码量均没有变化。
2、说明这内联函数HID_Host_USBTask(&Keyboard_HID_Interface);当前是无意义的。估计是提供一个接口,让用户添加。
3、我是菜鸟,仅是为了求知。呈送拙见!

一周热门 更多>