offsetof()
演算子を使用して構造体メンバーのオフセットを出力するために使用する小さなプログラムがあります。
問題の構造体が異なる多くのコンテキストでこのプログラムを使用するため、プロジェクトごとに (および構造体に加えた変更ごとに) コードを再プログラムする必要があります。これらの構造体 (制御構造体と状態構造体) はかなり大きくなる傾向があるため、更新には多くの時間がかかります。
私がしたいのは、offsetof()
同等のものを使用できるメソッドですが、2番目のパラメーターは、ステートメントでハードコーディングするのではなく、文字列として指定されるメンバーの名前になります。
簡単にするために、構造が 32 ビット ワードの単一および配列で構成されていると仮定すると、オフセットは常に 4 の倍数になります。
また、名前文字列の代わりに、代替方法を歓迎します。
[メンバーはすべてワードサイズですが、コンパイラーがメンバー間にパディングを追加する可能性があるため、メンバーをカウントするだけでアドレスを計算することは良い解決策ではないことに注意してください。1つの回答(削除された)が示唆したように、packed属性を使用するとパディングを削除することで問題を解決できますが、構造を定義する実際のアプリケーションがメモリアクセスを最適化するためにパディングを使用する可能性があるため、これは有効な解決策ではありません]