C · Avançado · Inglês · Técnico
container_of
Macro idiomática que recupera o ponteiro da struct que contém um membro, a partir do endereço do membro. Usa offsetof para subtrair o deslocamento.
Onde usar
Fundamental em listas intrusivas, como as do kernel Linux, em que o nó da lista fica dentro do objeto. Não faz parte da biblioteca padrão; você mesmo a define.
Em código
#define container_of(p, t, m) \
((t *)((char *)(p) - offsetof(t, m)))
struct no { struct no *prox; };
struct item { int id; struct no lista; };
// it = container_of(n, struct item, lista);Exemplos
Use container_of to get the item back from the list node.
Use container_of para recuperar o item a partir do nó da lista.
container_of is built on offsetof.
O container_of é construído sobre o offsetof.
Cuidado
Usar com um ponteiro que não aponta mesmo para aquele membro de uma struct do tipo indicado, o que é comportamento indefinido.