C'è un modo portatile in C per trovare la maschera per un campo di bit in fase di compilazione?Maschere bitfield in C
Idealmente, mi piacerebbe essere in grado di atomicamente chiaro un campo come questo:
struct Reference {
unsigned age : 3;
unsigned marked : 1;
unsigned references : 4;
};
struct Reference myRef;
__sync_and_and_fetch(&myRef, age, ~AGE_MASK);
Altrimenti devo prendere un blocco sul struct, che è più pesante di quanto mi piacerebbe.
__sync_and_and_fetch non funziona su bitfields: "GCC permette qualsiasi scalare o puntatore tipo integrale che è 1, 2, 4 o 8 byte di lunghezza." – sambowry