Messages in this thread | | | Date | Mon, 14 Jan 2013 13:22:11 +0100 | From | Mikael Pettersson <> | Subject | Re: container-of Implementation |
| |
Schrober writes: > Hi, > > I wondered why the container_of implementation is so complicated. > > #define container_of(ptr, type, member) ({ \ > const typeof( ((type *)0)->member ) *__mptr = (ptr); \ > (type *)( (char *)__mptr - offsetof(type,member) );}) > > isn't the __mptr not unnecessary? Why not following version? > > #define container_of(ptr, type, member) \ > ((type *)((char *)(ptr) - offsetof(type, member)))
Compile-time type checking. The first version requires ptr to be assignment-compatible with the type of the struct member, the second version accepts random junk for ptr.
| |