On 19 July 2011 23:57, Cheng Renquan wrote:
> On Tue, Jul 19, 2011 at 2:56 PM, Cheng Renquan <crq...@gmail.com> wrote:
>> Hi all,
>>
>> From info gcc I know it accepts a series of `.FIELDNAME' and `[INDEX]'
>> designators,
>> like
>>
>>     struct point ptarray[10] = { [2].y = yv2, [2].x = xv2, [0].x = xv0 };
>>
>>
>> But in my case, I have a struct with array of int as members,
>>
>>     struct mbox {
>>       int x[20];
>>       int y[20];
>>     };
>>
>> and want to declare a mbox variable with partially initialized, like
>>
>>     struct mbox mbox = { .x = { 1, 2 }, .y[19] = 3, };
>
> Sorry, my above example is not good, it compiles and works ok;
>
> What's really not working is this example by union:
>
>      union mbox {
>          int   w[3];
>          short s[6];
>          char  c[12];
>      };
>
> If I declare a union mbox and want to initialize w[0], s[2] and c[6],
>
>  union mbox mbox = { .w = { 1, }, .s[2] = 2, .c[6] = 's' };
>
> I want a mbox initialized with these 12 bytes (on little endian):
>
> 0000:   01 00 00 00 02 00 73 00  00 00 00 00
>
> And actually I got these:
>
> 0000:   00 00 00 00 00 00 73 00  00 00 00 00
>
> the hexdump result shows only last .c[6] make effect,
>
> Wonder if this is a bug or not supported? Thanks,
>

This question is more suitable for the gcc-help list, as it is a
question about using gcc not about developing it.

What you want is not supported.  The member of the union that is
initialized will either be the int[3], or the short[6], or the
char[12].  You cannot initialize some bytes of one member and some
bytes of another like that.

Maybe you should just do this instead:

union mbox mbox = { .c[0] = 1, .c[4] = 2, .c[6] = 's' };

Reply via email to