OFFSETOF

Section: Linux Programmer's Manual (3)
Updated: 2020-11-01
IndexJM Home Page
 

名前

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


関連キーワード

struct,offsetof,OFFSETOF,オフセット,include,member,プログラム,フィールド,バイト,コンパイラ 

Index

名前
書式
説明
返り値
準拠
プログラムのソース
この文書について

This document was created byman2html, using the manual pages.
Time: 15:49:11 GMT, July 11, 2021