Вот конкретно прямо из кода (немного о другом, но идея та же). 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}}};