Messages in this thread | | | Subject | Re: Question with "container_of(ptr, type, member)" | From | peter <> | Date | Wed, 31 Aug 2011 08:52:20 +0800 |
| |
I see now, It can gives an waring: "warning: initialization from incompatible pointer type", when give it an wrong type. thanks for your answer! On Wed, 2011-08-31 at 09:14 +1000, Ryan Mallon wrote: > On 30/08/11 20:44, peter wrote: > > I have a question about the macro " container_of(ptr, type, member) " > > I can write it as this, > > #define container_of(ptr, type, member) ({ \ > > (type *) ((char *) ptr - offset_of(type, member)); \ > > }) > > It can act the same as > > #define container_of(ptr, type, member) ({ \ > > const typeof( ((type *)0)->member ) *__mptr = (ptr); \ > > (type *)( (char *)__mptr - offsetof(type,member) );}) > > So why we don't use the first one ? > > Thanks for your answer. > > (I am a kernel newbie ,and sorry for my poor english~) > > The version used by the Linux kernel does type checking. > > ~Ryan >
| |