5

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) );})

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

4

1 に答える 1

8

ある程度の型安全性を追加します。2 番目のバージョンでは、ptr に何でも渡すことができ、正常にコンパイルされます。ptrカーネルのバージョンでは、 の型と一致しないへのポインターを渡すと、少なくとも警告が表示されますtype.member

于 2012-11-19T18:03:59.223 に答える