C/Appendice/Librerie standard/stddef.h

Indice del libro

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.