Unia (programowanie)
Z Wikipedii
Unia - typ danych w niektórych niskopoziomowych językach programowania, jak C, lub asembler, grupujący wiele różnych sposobów interpretacji tego samego fragmentu pamięci.
Unia jest podobna do struktury, jednak wszystkie pola zajmują ten sam obszar pamięci.
Przykładowo unia:
union nazwa_unii { char tablica_znakowa[4]; int wartosc; } u;
tworzy zmienną u, do której można mieć dostęp albo jako do liczby (u.wartosc), albo jako do tablicy znaków (u.tablica_znakowa).
Tego typu manewry są czasem przydatne w niskopoziomowym programowaniu. Użycie unii nie jest jednak zalecane w innych wypadkach, gdyż jest wybitnie wrażliwe na różnice w reprezentacji poszczególnych typów w pamięci. Ten sam program, używający unii może zupełnie inaczej działać w zależności od tego, czy liczby są zapisywane jako big endian, czy little endian i jaką mają długość w bajtach:
u.wartosc=0x44434241;
W u.tablica_znakowa znalazł się napis:
- 'ABCD' w przypadku procesora Intel, kompilator 32-bitowy
- 'AB' w przypadku procesora Intel, kompilator 16-bitowy dla DOSu
- 'DCBA' w przypadku procesora Motorola,
[edytuj] Struktury jako pola unii
Elementami unii mogą być struktury, co czasem jest przydatne:
union liczba { struct { unsigned int a :8; unsigned int b :8; unsigned int c :8; unsigned int d :8; } rozbicie_na_bajty; struct { unsigned int a :16; unsigned int b :16; } rozbicie_na_slowa; unsigned int liczba; };
[edytuj] Unie anonimowe
C++ dopuszcza tzw unie anonimowe w których nie ma ani nazwy unii, ani nazwy zmiennej:
union { int liczba; char znak; };
Do pól takiej unii można dostawać się bezpośrednio używając ich nazw (np. liczba lub znak z przykładu powyżej). Czasem ten mechanizm jest stosowany przy umieszczaniu unii anonimowej jako pola struktury.