ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Воскресенье
28 июля
1268044
VVB (14.12.2022 12:03 - 12:14, просмотров: 1474)
Для чего в структурах С нужны члены-массивы нулевой длины? 

Например, член "iso_packet" из кода CherryUSB:


struct usbh_urb {
    usbh_pipe_t pipe;
    struct usb_setup_packet *setup;
    uint8_t *transfer_buffer;
    uint32_t transfer_buffer_length;
    int transfer_flags;
    uint32_t actual_length;
    uint32_t timeout;
    int errorcode;
    uint32_t num_of_iso_packets;
    usbh_complete_callback_t complete;
    void *arg;
    struct usbh_iso_frame_packet iso_packet[0];
};

Комплятор дважды ругается: "warning: ISO C++ forbids zero-size array 'iso_packet' [-Wpedantic]" и "warning: zero-size array member 'usbh_urb::iso_packet' not at end of 'struct usbh_hub' [-Wpedantic]".


Второе предупреждение для этой структуры:

struct usbh_hub {
    usb_slist_t list;
    bool connected;
    bool is_roothub;
    uint8_t index;
    uint8_t hub_addr;
    usbh_pipe_t intin;
    USB_MEM_ALIGNX uint8_t int_buffer[1];
    struct usbh_urb intin_urb;
    struct usb_hub_descriptor hub_desc;
    struct usbh_hubport child[CONFIG_USBHOST_MAX_EHPORTS];
    struct usbh_hubport *parent;
    usb_slist_t hub_event_list;
};

Хочу уловить идею, которая подразумевает наличие этих членов.