Quand je parcourais le noyau Linux, j'ai trouvé une container_of
qui est définie comme suit :
#define container_of(ptr, type, member) ({ \
const typeof( ((type *)0)->member ) *__mptr = (ptr); \
(type *)( (char *)__mptr - offsetof(type,member) );})
Je comprends ce que fait container_of, mais ce que je ne comprends pas, c'est la dernière phrase, qui est la suivante
(type *)( (char *)__mptr - offsetof(type,member) );})
Si nous utilisons la macro comme suit :
container_of(dev, struct wifi_device, dev);
La partie correspondante de la dernière phrase serait :
(struct wifi_device *)( (char *)__mptr - offset(struct wifi_device, dev);
ce qui ressemble à ne rien faire. Quelqu'un peut-il combler ce vide ?