COHERENT manpages

This page displays the COHERENT manpage for offsetof() [Offset of a field within a structure].

List of available manpages
Index


offsetof() -- General Macro (stddef.h)

Offset of a field within a structure
#include <stddef.h>
size_t offsetof(structname, fieldname);

offsetof() is  a macro that  is defined in the  header <stddef.h>. It
returns the  number of bytes  that the field  fieldname is offset  from the
beginning of the the structure structname.

offsetof() may return  an offset for fieldname that is  larger than the sum
of the sizes  of all the members that precede  it.  This will be due to the
fact that  some implementations insert  padding into a  structure to ensure
that they are properly aligned.

Example

The  following  example  displays  the  offset  of  some  fields  within  a
structure:

#include <stddef.h>

struct foo {
    char a[13];
    long b;
    char c[7];
    short d;
    char e[3];
};

main ()
{
    int A, B, C, D, E;

    A = offsetof(struct foo, a[0]);
    B = offsetof(struct foo, b);
    C = offsetof(struct foo, c[0]);
    D = offsetof(struct foo, d);
    E = offsetof(struct foo, e[0]);

    printf ("%d %d %d %d %d\n", A, B, C, D, E);
}

When run, this program prints:

    0 16 20 28 30

Note that  even though field  `a' of structure  foo is only  13 bytes long,
field  `b'  is  aligned  at byte  16.   This  is  done  to conform  to  the
requirements of COFF.  For details,  see the section on ``COFF Linking'' in
the Lexicon entry for the linker ld.

See Also

alignment,
C language,
ld,
libc,
stddef.h,
struct
ANSI Standard, §7.1.6