Использование typeof
в определении ядра container_of()
только для проверки типов во время компиляции - это гарантирует, что переданный ptr
действительно является указателем на тот же тип, что и member
. Это может быть изменено, чтобы быть полностью ANSI C за счет этой проверки типа:
#define container_of(ptr, type, member) ((type *)((char *)ptr - offsetof(type, member)))
(offsetof()
в <stddef.h>
)