On Fri, Jan 16, 2009 at 06:57:57PM +0000, Andrew Haley wrote: > That's right. The important thing to realize is that the type of &field2 > in > > struct test > { > UINT8 field1; > UINT16 field2; > UINT8 field3; > } __attribute__((__packed__)); > > is not UINT16 *; the compiler knows that it's an element of a packed > struct, and generates code accordingly. The correct procedure is always > to pass the address of the whole struct. I've recently had the need to handle a non-aligned struct member from two different structures in a somewhat lengthy function. So, two questions: * Is there anything against implementing packed function arguments (like void handle(UINT16 *data __attribute__((packed)))) in gcc? Not that I'm going to do that right now :) , but in principle? * The recommended practice in such cases is to parse the data char by char. OTOH, portably casting a struct over a legacy protocol data or binary file would save much effort. C99 flexible array members, for example, do help. So, why isn't alignment (or, to be more exact, packed structures) standardized? Is it "just" difficulty of finding "the common denominator" for all platforms out there, or are there any more fundamental issues? Thanks in advance, -- Baurzhan Ismagulov http://www.kz-easy.com/