oracular (3) offsetof.3.gz

Provided by: manpages-ja-dev_0.5.0.0.20221215+dfsg-1_all bug

名前

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