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

Reply via email to