offsetof函数的应用

来源:互联网 发布:根域名 cname www 编辑:程序博客网 时间:2024/06/06 18:06
NAME
    offsetof - offset of a structure member


SYNOPSIS
    #include <stddef.h>
    size_t offsetof(type, member);


DESCRIPTION
    The macro offsetof() returns the offset of the field member from the start of the structure type.


    This  macro  is  useful because the sizes of the fields that compose a structure can vary across implementations, and compilers may insert different
    numbers of padding bytes between fields.  Consequently, an element's offset is not necessarily given by the sum of the sizes of  the  previous  ele‐
    ments.


    A compiler error will result if member is not aligned to a byte boundary (i.e., it is a bit field).


RETURN VALUE
    offsetof() returns the offset of the given member within the given type, in units of bytes.


CONFORMING TO
    C89, C99, POSIX.1-2001.


EXAMPLE
    On a Linux/i386 system, when compiled using the default gcc(1) options, the program below produces the following output:


    $ ./a.out
    offsets: i=0; c=4; d=8 a=16
    sizeof(struct s)=16


Program source


#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>


int
main(void)
{
    struct s {
        int i;
        char c;
        double d;
        char a[];
    };


    /* Output is compiler dependent */


    printf("offsets: i=%ld; c=%ld; d=%ld a=%ld\n",
        (long) offsetof(struct s, i),
        (long) offsetof(struct s, c),
        (long) offsetof(struct s, d),
        (long) offsetof(struct s, a));
    printf("sizeof(struct s)=%ld\n", (long) sizeof(struct s));


    exit(EXIT_SUCCESS);
}