Unions-Deklarationen
Eine Union „Deklaration“ gibt einen Satz Variablenwerte und optional ein Tag die Gesamtmenge benennend.Die Variablenwerte werden „Member“ von Union bezeichnet und können unterschiedliche Typen aufweisen.Unions sind „in varianten Datensätzen“ in anderen Sprachen vergleichbar.
Syntax
Struktur-oder-UNION Bezeichner:
Struktur-oderUNION-Bezeichneropt**{** Struktur-DeklarationListe }Struktur-oderUNION-Bezeichner
Struktur-oder:UNION
structunion
Struktur-DeklarationListe:
Struktur der DeklarationStruktur-DeklarationListe StrukturDeklaration
Der Inhalt wird so definiert, dass Union sein
StrukturDeklaration:
Spezifizierer-QualifiziererListe Struktur-DeklaratorListe ;Spezifizierer-QualifiziererListe:
Typspezifizierer Spezifizierer-QualifiziererListe optQualifizierer Spezifizierer-Qualifizierer Liste TYPE opt
Struktur-DeklaratorListe:
StrukturDeklaratorStruktur-DeklaratorListe und StrukturDeklarator
Eine Variable mit Union-Typ speichert einen der Werte, die von diesen Typ definiert sind.Die gleichen Regeln steuern Struktur- und Unions Deklarationen.Unions können Bitfelder auch haben.
Member von Unions können nicht über einen unvollständigen Typ aufweisen, voideingeben oder Funktion Typ.Daher können Member für eine Instanz der Union sein, können aber Zeiger auf den Union-Typ sein, der deklariert ist.
Eine Union-Typ-Deklaration ist nur eine Vorlage.Arbeitsspeicher wird nicht reserviert, bis die Variable deklariert ist.
Hinweis |
---|
Wenn eine Gesamtmenge von zwei Typen deklariert wird und ein Wert gespeichert ist, aber die Gesamtmenge mit dem anderen Typ zugegriffen wird, sind die Ergebnisse unzuverlässig.Beispielsweise wird eine Union von float und int deklariert.Ein float-Wert wird gespeichert, aber das Programm greift der Wert höher als int.In einer solchen Situation ist der Wert von der internen Speicherung von float-Werten abhängig sind.Der ganzzahlige Wert wird nicht zuverlässig sein. |
Beispiele
Nachfolgend finden Sie Beispiele für Unions:
union sign /* A definition and a declaration */
{
int svar;
unsigned uvar;
} number;
In diesem Beispiel wird eine Variable mit sign-Typ union eine Variable deklariert und mit dem Namen number , die zwei Member aufweist: svareine Zahl mit Vorzeichen und uvareine ganze Zahl ohne Vorzeichen.Durch diese Deklaration können den aktuellen Wert oder als Wert gespeichert werden soll, wird entweder mit Vorzeichen, number ohne Vorzeichen.Das Tag, das diesem Union-Typ zugeordnet ist, ist sign.
union /* Defines a two-dimensional */
{ /* array named screen */
struct
{
unsigned int icon : 8;
unsigned color : 4;
} window1;
int screenval;
} screen[25][80];
Das Array screen 2,000 Elemente enthält.Jedes Element des Arrays ist eine einzelne Gesamtmenge mit zwei Membern: window1 und screenval.Der window1-Member ist eine Struktur mit zwei Bitfeldmember, icon und - color.Der screenval-Member entspricht int.Zu jedem Zeitpunkt wird jedes Element entweder int dargestellt durch union screenval oder die Struktur, die durch window1dargestellt wird.
Microsoft-spezifisch
Geschachtelte Unions können anonym deklariert werden, wenn sie Mitglieder einer anderen Struktur oder Union sind.Dies ist ein Beispiel für eine Union namenlosen:
struct str
{
int a, b;
union / * Unnamed union */
{
char c[4];
long l;
float f;
};
char c_array[10];
} my_str;
.
.
.
my_str.l == 0L; /* A reference to a field in the my_str union */
Unions werden häufig in einer Struktur geschachtelt, die das Feld enthält, das den Typ der Daten gibt, die in der Union an einer bestimmten Zeit enthalten sind.Dies ist ein Beispiel für eine Deklaration für eine solche Union:
struct x
{
int type_tag;
union
{
int x;
float y;
}
}
Weitere Informationen finden Sie unter Struktur und Gewerkschaftsmitglieder zu Informationen über das Verweisen von Unions.
Microsoft ENDES bestimmten