揮発性のメモ2

http://d.hatena.ne.jp/iww/

構造体のメンバーのオフセットを知る

Man page of OFFSETOF

#include <stddef.h>
typedef struct {
    char a;
    int b;
} hoge_t;

main()
{
    printf( "%d\n", offsetof( hoge_t, b ) );  // 4
}


どんなマクロなのか読んでみたかったけど、なんだかどこにも定義が無い。
lib/gcc/i486-linux-gnu/4.3.2/include/stddef.h なんかには

#define offsetof(TYPE, MEMBER) __builtin_offsetof (TYPE, MEMBER)

と書いてあり、結局なにもわからなかった。
そのた参考資料:


あと、古そうな環境のために

#ifndef offsetof
# define offsetof(type,ident) ((size_t)&(((type*)0)->ident))
#endif

のように自分で定義しているCプログラムは結構ある。