offsetofのヘルプ・マニュアル
日本語 英語
offsetof --help
man offsetof
OFFSETOF(3) Linux Programmer’s Manual OFFSETOF(3)
名前
offsetof - 構造体のメンバーのオフセットを返す
書式
#include
size_t offsetof(type, member);
説明
offsetof() マクロは、フィールド member の構造体 type の先頭からのオフセ
ットを返す。
このマクロが有用なのは、構造体を構成するフィールドのサイズは実装によ っ
て 変化するし、コンパイラによりフィールド間に挿入するパディングのバイト
数も違う可能性があるからである。その結果、あるエレメントのオフセット は
必ずしもそれより前のエレメントのサイズの合計とはならない。
member がバイト境界に位置していない場合 (すなわち、ビットフィールドの場
合) には、コンパイラでエラーが発生する。
返り値
offsetof() は、指定された member の指定された type の中でのオフセットを
、バイト単位で返す。
準拠
C89, C99, POSIX.1-2001.
例
Linux/i386 システムで、 gcc(1) のデフォルトオプションでコンパイルされた
場合、下記のプログラムは以下のような出力を返す。
$ ./a.out
offsets: i=0; c=4; d=8 a=16
sizeof(struct s)=16
プログラムのソース
#include
#include
#include
int
main(void)
{
struct s {
int i;
char c;
double d;
char a[];
};
/* 出力はコンパイラ依存である */
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);
}
GNU 2008-07-12 OFFSETOF(3)
OFFSETOF(3) Linux Programmer’s Manual OFFSETOF(3)
NAME
offsetof - offset of a structure member
SYNOPSIS
#include
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 elements.
A compiler error will result if member is not aligned to a byte bound-
ary (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
#include
#include
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);
}
COLOPHON
This page is part of release 3.22 of the Linux man-pages project. A
description of the project, and information about reporting bugs, can
be found at http://www.kernel.org/doc/man-pages/.
GNU 2008-07-12 OFFSETOF(3)