On 8 January 2014 21:48, Ian Pilcher wrote: > On 01/08/2014 04:42 PM, Jonathan Wakely wrote: >>> >>> #define SHORT_BYTES(s) { ((s) & 0xff), (((s) >> 8) & 0xff) } >>> >>> struct foo { >>> size_t value_size; >>> unsigned char value[]; >>> }; >>> >>> static struct foo foo_short = { >>> .value_size = sizeof(short), >>> .value = SHORT_BYTES(513), >>> }; >> >> >> Where do you think those two bytes are meant to be stored? >> > > Maybe I don't understand your question, but the two bytes that make up > the short get stored in the "value" element (as an array of 2 unsigned > characters). The point of my question is that the 'value' member is an incomplete type, it does not have any storage, so there is nowhere to store those two bytes. But I didn't realise GCC has a non-standard extension that does allow what you're doing, automatically allocating space after the struct: http://gcc.gnu.org/onlinedocs/gcc/Zero-Length.html