Un sin nombre union
dentro de un struct
tiene sentido, ya que le permite referirse a los miembros de la unión sin especificar su nombre, código, por tanto, más corto:
struct {
int a;
union {
int b, c, d;
};
} foo;
Así que acceden a los miembros de la union
es igual accediendo a un miembro de la estructura contenedora: foo.a
y foo.b
. De lo contrario, debe usar foo.union_name.b
para acceder a un miembro de la unión.
Por supuesto, un programador de "usuario" que utilice dicha estructura debe saber que la configuración foo.c
afecta el valor de foo.b
y foo.d
.
Por la misma razón la inversa se puede hacer, es decir, poner un anónimo struct
dentro de un union
:
union {
struct {
int a, b;
};
int c;
} foo;
De esta manera foo.a
y foo.b
pueden usarse simultáneamente y foo.c
se puede utilizar en otro caso.
No puedo pensar en ningún otro uso para estructuras o uniones anónimas. "Declarar" una estructura/unión anónima es un oxímoron y es como decir int;
en lugar de int a;
.
Eso es realmente bueno, no lo sabía.¡Me has ahorrado muchas pulsaciones de teclas! – GWW
Se trata de uniones anónimas, ¿qué hay de las estructuras sin nombre como en el ejemplo proporcionado por OP? –