i am guessing that the requirement of being able to demote a type to
one of its anonymouse constituents -- as in Node to Lock in Ken's example --
would require a uniform layout that makes it easy to calculate the offset.
> i've got a structure that looks like this
>
> /* ethernet header */
> typedef struct{
> uchar d[6];
> uchar s[6];
> uchar type[2];
> }Ehdr;
>
> typedef struct{
> Ehdr;
> uchar op[2];
> ...
> }Pkt;
>
> the problem is that 8c adds two bytes of padding between
> the end of pkt->type and pkt->op. since sizeof Ehdr%wordsize != 0
> this isn't totally unexpected. suprisingly, adding the
> appropriate packed pragmas doesn't eliminate the padding.
> is this a bug?
>
> of course, if my original definition had been
>
> typedef struct{
> uchar d[6];
> uchar s[6];
> uchar type[2];
> uchar op[2];
> ...
> }Pkt;
>
> i would have been fine. but doesn't this defeat
> the point of unnamed structures?
>
> also, the fact that there is padding contradicts
> my mental model of unnamed structures. i thought
> that all the elements of unnamed structures were
> laid down as if they were elements of the enclosing
> structure. my reading /sys/doc/compilers.ps doesn't
> say much. is there another reference on unnamed
> structures?
>
> - erik