私は、offsetof MACRO の実装の説明について、非常に長く懸命に検索してきました (リンクは最後に)。
#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
特に、構造体のメンバーのオフセットを取得するための NULL の逆参照。多くの記事では、NULL ポインターは実際には実際には逆参照されないと言ってその理由をごまかしていますが、それは私には意味がありません。
ここに私が理解しようとしたリンクのいくつかがあります:
- http://www.viva64.com/en/b/0301/
- http://www.embedded.com/design/prototyping-and-development/4024941/Learn-a-new-trick-with-the-offsetof--マクロ
- http://www.geeksforgeeks.org/the-offsetof-macro/
- C の offsetof マクロはどのように機能しますか?
- NULL ポインターを逆参照すると、C/C++ でプログラムがクラッシュすることが保証されますか?
私が探して理解しようとしているのは、コンパイラが MACRO 定義をどのように解釈するかを段階的に理解することです。最終的には、NULL ポインターが実際に逆参照されていない方法を説明します。
編集:他の質問が私の質問に答えたとしても、元の投稿で指摘されているように、それらは私には意味がありません。@dasblinkenlight による回答は、他の質問への回答で私が抱えていた正確な問題、つまり、実際にポインターを逆参照していないのはどうしてなのかを明らかにしています。