offsetofマクロを使ったプログラム
offsetofマクロについて仕様を確認しました。
確認環境は以下の通りです。
開発環境 | OS |
---|---|
Microsoft Visual Studio Community 2019 Version 16.11.7 | Windows 10 バージョン21H1 |
使い方
offsetof(構造体名(struct xxx),メンバー変数名) ・・・ 構造体メンバーの先頭から指定したメンバーまでのオフセット値を返してくれます。
参考
MSDNを確認ください。
何ができるの
offsetofは構造体のメンバーに対して適用します。
下記構造体をサンプルとします。
struct students { // 生徒情報(構造体)
char name[16]; // 氏名
short belongto; // 所属
short age; // 年齢
long testaverage; // テスト平均
};
サンプルプログラム
上記の構造体に対して、以下のとおり、offsetofマクロを使用してみます。
printf("offsetof(name)=%d\n", offsetof(struct students, name));
printf("offsetof(belongto)=%d\n", offsetof(struct students, belongto));
printf("offsetof(age)=%d\n", offsetof(struct students, age));
printf("offsetof(testaverage)=%d\n", offsetof(struct students, testaverage));
実行結果
offsetof(name)=0 // 先頭メンバーなので0
offsetof(belongto)=16 // char 16byteの後なので先頭からbelongtoまでのオフセット値16byte
offsetof(age)=18 // belongto 2byteの後なので先頭からageまでのオフセット値18byte
offsetof(testaverage)=20 // age 2byteの後なので先頭からtestaverageまでのオフセット値20byte
感想
使ってみるとシンプルですね。
ただ、どんな時に使えるか分かりません。
効果的な使い方があれば教えて下さい。