構造体のインスタンスを割り当てずに、構造体内のフィールドのオフセットを教えてくれるコードを探しています。
IE:与えられた
struct mstct {
int myfield;
int myfield2;
};
私は書くことができます:
mstct thing;
printf("offset %lu\n", (unsigned long)(&thing.myfield2 - &thing));
そして、出力用にoffset 4
を取得します。そのmstct thing
宣言/割り当てなしでどうすればよいですか?
&<struct>
が構造体の最初のフィールドの最初のバイトを常に指すとは限らないことは知っています。後で説明できます。
標準のoffsetof()マクロ(stddef.h内)はどうですか?
編集:なんらかの理由でoffsetof()マクロを使用できない可能性がある場合は、次のようなものを使用して効果を得ることができます:
#define OFFSETOF(type, field) ((unsigned long) &(((type *) 0)->field))
右、offsetof
マクロを使用します。これは(少なくともGNU CCで))CおよびC++コードの両方で使用できます。
offsetof(struct mstct, myfield2)
printf( "オフセット:%d\n"、&((mstct *)0)-> myfield2);