Bezimienny union
wewnątrz struct
sens, ponieważ pozwala zapoznać się z członkami unii bez podania jego nazwy, a więc krótszy kod:
struct {
int a;
union {
int b, c, d;
};
} foo;
Więc dostępie do członków union
jest jak dostęp do członka struktury zawierającej: foo.a
i foo.b
. W przeciwnym razie musisz użyć foo.union_name.b
, aby uzyskać dostęp do członka związku.
Oczywiście programista "użytkowy" korzystający z takiej struktury powinien mieć świadomość, że ustawienie foo.c
wpływa na wartość foo.b
i foo.d
.
Z tego samego powodu odwrotnego można zrobić, a mianowicie wprowadzenie anonimowego struct
wewnątrz union
:
union {
struct {
int a, b;
};
int c;
} foo;
ten sposób foo.a
i foo.b
mogą być używane jednocześnie i foo.c
mogą być wykorzystane w innym przypadku.
Nie mogę wymyślić żadnych innych zastosowań anonimowych struktur lub związków. "Deklarowanie" anonimowego struct/union jest oksymoronem i jest tak jak powiedzenie int;
zamiast int a;
.
To naprawdę miłe, nie wiedziałem o tym.Uratowałeś mi wiele klawiszy! – GWW
To dotyczy bezimiennych związków, a co z bezimiennymi strukturami, jak w przykładzie dostarczonym przez OP? –