C/Appendice/Librerie standard/stddef.h
Il file stddef.h della libreria standard definisce alcuni tipi di dati e delle macro fondamentali.
typedef long int ptrdiff_t;
typedef unsigned long int size_t;
typedef unsigned int wchar_t;
#define NULL ((void *)0)
#define offsetof(TYPE, MEMBER) ((size_t)&((TYPE *)0)->MEMBER)
Di tutte le definizioni merita attenzione la macro-istruzione offsetof che serve a misurare lo scostamento di un membro di una struttura, per la quale è il caso di scomporre i suoi componenti:
- l'espressione ((tipo_struttura *)0) rappresenta un puntatore nullo trasformato, con un cast, in un puntatore nullo al tipo di struttura alla quale si sta facendo riferimento;
- l'espressione ((tipo_struttura *)0)->nome_membro rappresenta il contenuto del membro indicato, preso a partire dall'indirizzo zero;
- l'espressione &((tipo_struttura *)0)->nome_membro rappresenta l'indirizzo del membro indicato, preso a partire dall'indirizzo zero.
Pertanto, l'indirizzo del membro, relativo all'indirizzo zero, corrisponde anche al suo scostamento a partire dall'inizio della struttura. Così, tale valore viene convertito con un cast nel tipo size_t.