Hola, igual sería bueno especificar con que compilador se pretende la solución, si bien la solución que plantea Suky es la mejor C no permite estructuras anónimas.
Saludos !
El C18 si permite estructuras anónimas en las uniones, no así en estructuras con estructuras dentro.
Yendo al grano, esto es válido y compilará sin errores en C18
typedef union {
unsigned int mivalor;
struct {
unsigned char queseyo;
unsigned char ahoraveo;
};
struct {
unsigned miprimerbit:1;
unsigned:7;
};
} Tmiunion;
Estructura anónima dentro de una estructura, esto no compilará.
typedef struct {
unsigned int mivalor;
struct {
unsigned char queseyo;
unsigned char ahoraveo;
};
struct {
unsigned miprimerbit:1;
unsigned:7;
};
} Tmistruct
La razón por la que una funciona y la otra no, es sencilla. Para el compilador en una unión, la ubicación de cada estructura o su denominación le es indistinta ya que al acceder a
queseyo estará también accediendo al primer valor de
mivalor o lo que es lo mismo estará seteando el bit
miprimerbitEn cambio cuando se hace una estructura de estructuras, es importante saber a cual estructura se quiere acceder , de allí que las estructuras de estructuras no pueden ser anónimas.
Las estructuras anónimas son de enorme utilidad para problemas como el caso del requerimiento de rachelies pero tamibén para drivers de algún periférico donde por ejemplo, a veces queremos setear un valor de un sencillo bit, pero en ocasiones queremos acceder a sus valores como bytes completos pero queremos que al modificar el bit, también se modifique el byte y viceversa.