#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プログラムは結構ある。