Man page - offsetof(3)

Packages contains this manual

Available languages:

en fr ja ru ro

Manual

OFFSETOF

名 前
書 式
説 明
返 り 値
準 拠

プ ロ グ ラ ム の ソ ー ス
こ の 文 書 に つ い て

名 前

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/ に 書 か れ て い る 。