макрос объявлен в linux/kernel.h
используется для получения структуры из содержащей ее структуры
в частности многие структуры в ядре связаны списками типа struct list_head,которые ничего не содержат,кроме указателей на следующий и предыдущий элемент.
этот макрос должен извлекать структуру по указателю,типу структуры и имени члена в структуре#define container_of(ptr, type, member) ({ \
const typeof( ((type *)0)->member ) *__mptr = (ptr); \
(type *)( (char *)__mptr - offsetof(type,member) );})
как понимать выражение ((type *)0)->member?
и что такое __mptr?
еще нашел,что такое offsetof
#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
если можете,поясните максимально днтально работу макроса container_of
спасибо.