Messages in this thread | | | Date | Mon, 14 Jan 2013 13:23:21 +0100 | Subject | Re: container-of Implementation | From | Geert Uytterhoeven <> |
| |
On Mon, Jan 14, 2013 at 11:46 AM, Schrober <franzschrober@yahoo.de> wrote: > 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)))
The __mptr construct will cause a compiler warning if ptr is of the wrong type.
Gr{oetje,eeting}s,
Geert
-- Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org
In personal conversations with technical people, I call myself a hacker. But when I'm talking to journalists I just say "programmer" or something like that. -- Linus Torvalds
| |