On Fri, 2005-04-15 at 09:27 -0600, E. Weddington wrote:
> Ralf Corsepius wrote:
>
> >Hi,
> >
> >I just tripped over this snipped below in a piece of code, I didn't
> >write and which I don't understand:
> >
> >...
> >struct somestruct {
> > struct entrystruct *e1 __attribute__ ((packed));
> > struct entrystruct *e2 __attribute__ ((packed));
> >};
> >...
> >
> >Is this meaningful?
> >
> >I guess the author wanted e1 and e2 to point to a
> >"packed struct entrystruct", but this doesn't seem to be what GCC
> >interprets this code.
> >
> >
> >
> >
>
> Take a look at the manual in the section about attributes of variables,
> <http://gcc.gnu.org/onlinedocs/gcc-3.4.3/gcc/Variable-Attributes.html#Variable-Attributes>
I read this, over and over again, before posting, but ...
> It seems that GCC will interpret the above as e1 and e2 is packed within
> the struct somestruct so that e2 "immediately follows e1" (according to
> the manual). The packed attribute in this case does not refer to what e1
> and e2 is pointing to.
That's what I found out by experimenting and is the reason why I am
asking. From what I see on i386,
struct entrystruct * entry __attribute__ ((packed));
is interpreted as "packed pointer to struct"
not as "pointer to packed struct",
i.e. this construct is not meaningful.
> Though I'm not sure what putting the packed
> attribute on e1 will buy you.
You've got the point - I am collecting ammunition to fight a stubborn
original author :-)
Ralf