offset of structure fields

Eljay Love-Jensen eljay@adobe.com
Wed Jul 7 12:58:00 GMT 2004


Hi Massimiliano,

Try this...

-----------------------------------------------
//I need to know the offset of the fields. For example f1[0].ff1 is placed 
at the offset 0, and f1[2].ff2, or f3?
//There is a way to obtain these offsets without have an istance of Param_t?

#include <stddef.h> /* stddef.h has offsetof macro. */

typedef unsigned short int u16_t;
typedef unsigned char u8_t;

typedef struct
{
     struct {
         u16_t ff1;
         u16_t ff2;
         u16_t ff3;
     } f1[3];
     u8_t f2;
     u8_t f3;
     u8_t f4;
     u16_t f5;
} Param_t;

int main()
{
     size_t dist;

     dist = offsetof(Param_t, f1[0].ff1);
     printf("f1[0].ff1 is at byte %lu\n", (unsigned long int)dist);

     dist = offsetof(Param_t, f1[2].ff2);
     printf("f1[2].ff2 is at byte %lu\n", (unsigned long int)dist);

     dist = offsetof(Param_t, f3);
     printf("f3        is at byte %lu\n", (unsigned long int)dist);
}

/* Output, using GCC 3.3.1 on Cygwin / WinNT
f1[0].ff1 is at byte 0
f1[2].ff2 is at byte 14
f3        is at byte 19
*/
-----------------------------------------------

HTH,
--Eljay



More information about the Gcc-help mailing list