2012-11-19 6 views
5

の定義:代わりとしてcontainer_ofを定義するcontainer_ofマクロ

#define container_of(ptr, type, member) ({ \ 
      const typeof(((type *)0)->member) *__mptr = (ptr); 
      (type *)((char *)__mptr - offsetof(type,member));}) 

は、なぜこれが単に動作しません。

#define container_of(ptr, type, member) ({ \ 
        (type *)((char *)(ptr) - offsetof(type,member));}) 

定義の最初の行の使用量は何ですか?

答えて

7

これは、あるレベルの型安全性を追加します。あなたの2番目のバージョンでは、ptrのために何かを渡すことができ、それはうまくコンパイルされます。カーネルのバージョンでは、ptrのポインタがtype.memberのタイプと一致しない場合、少なくとも警告が表示されます。

関連する問題