Provided by: manpages-ja-dev_0.5.0.0.20221215+dfsg-1_all
名前
offsetof - 構造体のメンバーのオフセットを返す
書式
#include <stddef.h> size_t offsetof(type, member);
説明
offsetof() マクロは、フィールド member の 構造体 type の先頭からのオフセットを返す。 このマクロが有用なのは、 構造体を構成するフィールドのサイズは実装によって変化するし、 コン パイラによりフィールド間に挿入するパディングのバイト数も 違う可能性があるからである。 その 結果、あるエレメントのオフセットは必ずしもそれより前の エレメントのサイズの合計とはならな い。 member がバイト境界に位置していない場合 (すなわち、ビットフィールドの場合) には、 コンパイ ラでエラーが発生する。
返り値
offsetof() は、指定された member の指定された type の中でのオフセットを、バイト単位で返 す。
準拠
POSIX.1-2001, POSIX.1-2008, C89, C99.
例
Linux/i386 システムで、 gcc(1) のデフォルトオプションで コンパイルされた場合、下記のプロ グラムは以下のような出力を返す。 $ ./a.out offsets: i=0; c=4; d=8 a=16 sizeof(struct s)=16 プログラムのソース #include <stddef.h> #include <stdio.h> #include <stdlib.h> int main(void) { struct s { int i; char c; double d; char a[]; }; /* 出力はコンパイラ依存である */ printf("offsets: i=%zu; c=%zu; d=%zu a=%zu\n", offsetof(struct s, i), offsetof(struct s, c), offsetof(struct s, d), offsetof(struct s, a)); printf("sizeof(struct s)=%zu\n", sizeof(struct s)); exit(EXIT_SUCCESS); }
この文書について
この man ページは Linux man-pages プロジェクトのリリース 5.10 の一部である。プロジェクトの 説明とバグ報告に関する情報は https://www.kernel.org/doc/man-pages/ に書かれている。