mirror of https://github.com/mkerrisk/man-pages
98 lines
3.0 KiB
Groff
98 lines
3.0 KiB
Groff
.\" Copyright (C) 2006 Justin Pryzby <pryzbyj@justinpryzby.com>
|
|
.\" and Copyright (C) 2006 Michael Kerrisk <mtk.manpages@gmail.com>
|
|
.\"
|
|
.\" Permission is hereby granted, free of charge, to any person obtaining
|
|
.\" a copy of this software and associated documentation files (the
|
|
.\" "Software"), to deal in the Software without restriction, including
|
|
.\" without limitation the rights to use, copy, modify, merge, publish,
|
|
.\" distribute, sublicense, and/or sell copies of the Software, and to
|
|
.\" permit persons to whom the Software is furnished to do so, subject to
|
|
.\" the following conditions:
|
|
.\"
|
|
.\" The above copyright notice and this permission notice shall be
|
|
.\" included in all copies or substantial portions of the Software.
|
|
.\"
|
|
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
.\" EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
|
.\" IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
|
.\" CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
|
.\" TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
|
.\" SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
.\"
|
|
.\" References:
|
|
.\" /usr/lib/gcc/i486-linux-gnu/4.1.1/include/stddef.h
|
|
.\" glibc-doc
|
|
.TH OFFSETOF 3 2006-05-23 "GNU" "Linux Programmer's Manual"
|
|
.SH NAME
|
|
offsetof \- offset of a structure member
|
|
.SH SYNOPSIS
|
|
.nf
|
|
.B #include <stddef.h>
|
|
.sp
|
|
.BI "size_t offsetof(" type ", " member );
|
|
.fi
|
|
.SH DESCRIPTION
|
|
The macro
|
|
.BR offsetof ()
|
|
returns the offset of the field
|
|
\fImember\fP from the start of the structure \fItype\fP.
|
|
|
|
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 elements.
|
|
|
|
A compiler error will result if
|
|
\fImember\fP is not aligned to a byte boundary
|
|
(i.e., it is a bit field).
|
|
.SH "RETURN VALUE"
|
|
.BR offsetof ()
|
|
returns the offset of the given element within the
|
|
given type, in units of bytes.
|
|
.SH "CONFORMING TO"
|
|
C89, C99, POSIX.1-2001.
|
|
.SH EXAMPLE
|
|
On a Linux/i386 system, when compiled using the default
|
|
.BR gcc (1)
|
|
options, the program below produces the following output:
|
|
.nf
|
|
|
|
$ ./a.out
|
|
offsets: i=0; c=4; d=8 a=16
|
|
sizeof(struct s)=16
|
|
|
|
.fi
|
|
.nf
|
|
#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);
|
|
}
|
|
.fi
|
|
.\" .SH SEE ALSO
|
|
.\" FIXME . When one day readdir_r(3) is documented, it should have
|
|
.\" a SEE ALSO that refers to this page.
|