Когда я просматривал ядро Linux, я нашел макрос container_of
, который определяется следующим образом:
#define container_of(ptr, type, member) ({ \
const typeof( ((type *)0)->member ) *__mptr = (ptr); \
(type *)( (char *)__mptr - offsetof(type,member) );})
Я понимаю, что делает container_of, но я не понимаю, это последнее предложение, которое
(type *)( (char *)__mptr - offsetof(type,member) );})
Если мы используем макрос следующим образом:
container_of(dev, struct wifi_device, dev);
Соответствующая часть последнего предложения будет:
(struct wifi_device *)( (char *)__mptr - offset(struct wifi_device, dev);
который выглядит как ничего не делать. Может ли кто-нибудь заполнить пустоту здесь?