This is the mail archive of the gcc-help@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Flexible array member initializers


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]