C · Avançado · Inglês · Técnico
offsetof
Macro de stddef.h que devolve, em bytes, a posição de um membro dentro de uma struct, medida a partir do início dela. O resultado é do tipo size_t.
Onde usar
Aparece em serialização e em macros como container_of, que recuperam a struct a partir do endereço de um membro. Leva em conta o padding inserido pelo compilador.
Em código
#include <stddef.h>
struct s { char c; int i; };
size_t off = offsetof(struct s, i);
// off costuma ser 4 por causa do paddingExemplos
Use offsetof instead of counting bytes by hand.
Use offsetof em vez de contar bytes à mão.
offsetof of the second field is 4 because of padding.
O offsetof do segundo campo é 4 por causa do padding.
Cuidado
Calcular o deslocamento à mão somando tamanhos de campos, porque o padding invalida a conta.
Origem
Do inglês offset of, deslocamento de.