Campo di bit (bit field)
Il modo del C per dare un nome ai singoli bit di un intero dentro una struct: piacevole da leggere e quasi del tutto non specificato quanto a disposizione in memoria.
Scrivendo unsigned ready : 1; un membro della struct diventa largo un solo bit, e reg.ready = 1 si legge come una normale assegnazione. È allettante quando si descrive un registro hardware. Il problema è che lo standard lascia al compilatore l'ordine dei bit, il padding e l'unità di memoria sottostante, per cui la stessa struct può avere layout diversi tra compilatori o tra architetture con endianness differente.
Ogni scrittura è inoltre un ciclo di lettura-modifica-scrittura, che può cancellare bit di stato azzerati dalla lettura. Per questo CMSIS e la maggior parte degli header dei produttori usano maschere e shift, e per questo MISRA C limita fortemente i campi di bit.