C99 norma 6.7.2.1/10 (enfasi mia):
L'attuazione può assegnare qualsiasi unità di memorizzazione indirizzabile abbastanza grande da contenere un campo di bit. Se rimane abbastanza spazio, un campo di bit che segue immediatamente un altro campo di bit in una struttura deve essere impacchettato in bit adiacenti della stessa unità. Se lo spazio insufficiente rimane, se un campo di bit che non si adatta viene inserito nell'unità successiva o si sovrappone alle unità adiacenti è definito dall'implementazione. L'ordine di assegnazione dei campi di bit all'interno di un'unità (ordine alto a basso ordine o basso ordine a alto ordine) è definito dall'implementazione. L'allineamento dell'unità di memoria indirizzabile non è specificato.
Quindi, l'ordine deve essere documentato dall'implementazione del compilatore.
Tuttavia, l'implementazione o la non specificazione dell'implementazione di bitfield implementano o non specificano che utilizzarli per modellare hardware, filo-protocollo o campi di bit di formato file in modo portatile non valga la pena di tentare.
Se si desidera che i 'campi di bit' di modellare qualcosa di esterno al vostro programma (come le cose di cui sopra), utilizzare le maschere esplicite, apparecchiare e sparecchiare i bit usando gli operatori standard bit-saggio (|
, '& ,
~ ,
< < `, ecc.). Usa le funzioni in linea di aiuto (o anche i macro se devi) per rendere questo più facile/chiaro nel tuo codice.
fonte
2010-12-28 17:20:34
Nota: Secondo la norma, l'MSB non è definito. Sulla tua piattaforma specifica, sospetto che 'reserved' contenga l'MSB ma non sono positivo. –
@Billy: sembra una risposta per me. –
Ehm ... Questa è una domanda piuttosto strana. Hai solo 3 campi di bit nella tua dichiarazione. 2 di questi sono campi di bit a 1 bit, cioè non vi è alcun problema di "quale fine" con loro, poiché c'è solo 1 bit lì. L'unico campo di bit multi-bit chiamato 'reserved', che suggerisce che non è usato affatto. Quindi, fondamentalmente, l'unica domanda di campo che tu puoi applicare è 'riservata'. Stai chiedendo specificamente su 'reserved'? In caso contrario, chiarisci la tua domanda. – AnT