EN JA
OFFSETOF(3)
OFFSETOF(3) Linux Programmer's Manual OFFSETOF(3)

名前

offsetof -構造体のメンバーのオフセットを返す

書式


#include <stddef.h>
 

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 <stddef.h>
#include <stdio.h>
#include <stdlib.h>


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);
}

この文書について

この man ページは Linux man-pages プロジェクトのリリース 3.51 の一部である。プロジェクトの説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。
2008-07-12 GNU