C言語で`containerof`の使い方について教えてください
C言語では、container_ofというマクロがあり、与えられたメンバーを含む構造体のポインタを取得するために使われます。
container_of の構文は次のとおりです。
#define container_of(ptr, type, member) ({ \
const typeof(((type *)0)->member) *__mptr = (ptr); \
(type *)((char *)__mptr - offsetof(type, member)); })
構造体型の変数typeのmemberメンバを指すポインタがptrです。
container_ofマクロは、ptrのアドレスから、structure内のmemberのオフセット分を引いて構造体の先頭アドレスを算出し、それをtype型のポインタにキャストします。
このマクロは通常、データ構造で構造体のポインタを取得するために使用されます。例えば、リンクトリストでノードを走査する場合、container_of マクロを使用してノードを含む構造体のポインタを取得してから、構造体に対して操作を実行できます。