ExpertiDict

C · Avançado · Inglês · Técnico

container_of

/kənˈteɪ.nɚ ʌv/substantivo

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.

Veja também

Todos os termos de C