ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Суббота
4 мая
1425621 Топик полностью
LightElf (12.04.2024 12:59, просмотров: 64) ответил Idler на Что, действительно, получаются? IAR на то самое с квадратными скобками внутри фигурных ругается: "an initializer cannot be specified for a flexible array member with automatic storage duration"
Вот конкретно прямо из кода (немного о другом, но идея та же). 
typedef struct mfifo_s
{
    uint16_t       rsvd;
    uint8_t        ri;
    uint8_t        wi;
    mbuf_t*        buf[];
} mfifo_t;

#define ETH_BUFFER_MASK (ETH_BUFFER_COUNT-1) #if (ETH_BUFFER_COUNT & ETH_BUFFER_MASK) # error ETH_BUFFER_COUNT must be power-of-two! #endif static mfifo_t mfifo_free = { 0, 0, 0, {[ETH_BUFFER_MASK] = 0}};

IAR 7.80.1 без проблем жрет. Поддержка VLA выключена (я их не люблю очень).

А вот такое (массив из структур переменной длины с инициализацией) - не жрет, хотя древний Watcom сожрал на ура и даже не накосячил.

typedef struct mbuf_s
{
    uint16_t       length;
    uint8_t        flags;
    uint8_t        refcnt;
    uint32_t       data[];
} mbuf_t;
mbuf_t   mbuf_arr[ETH_BUFFER_COUNT] = { [ETH_BUFFER_MASK] = { 0, 0, 0, {[ETH_BUFFER_LENGTH-1] = 0}}};
Не надо делать мне как лучше, оставьте мне как хорошо