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