Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Объявление объединения указывает набор значений переменных и, при необходимости, тег, именующий объединение. Значения переменной называются "членами" объединения и могут иметь разные типы. Профсоюзы похожи на "вариантные записи" на других языках.
Синтаксис
struct-or-union-specifier:
struct-or-union
identifier
выбирать{struct-declaration-list}
struct-or-union
identifier
struct-or-union:
struct
union
struct-declaration-list:
struct-declaration
struct-declaration-list
struct-declaration
Содержимое объединения определяется следующим образом.
struct-declaration:
specifier-qualifier-list
struct-declarator-list
;
specifier-qualifier-list:
type-specifier
specifier-qualifier-list
выбирать
type-qualifier
specifier-qualifier-list
выбирать
struct-declarator-list:
struct-declarator
struct-declarator-list
,
struct-declarator
Переменная с union типом сохраняет одно из значений, определенных этим типом. Те же правила управляют объявлениями структуры и объединения. Профсоюзы также могут иметь битовые поля.
Члены профсоюзов не могут иметь неполный тип, тип voidили тип функции. Поэтому члены не могут быть экземпляром профсоюза, но могут быть указателями на тип объединения, объявленный.
Объявление типа объединения — это только шаблон. Память не зарезервирована до объявления переменной.
Замечание
Если объявляется объединение двух типов, а одно значение сохраняется, но объединение обращается к другому типу, результаты ненадежны. Например, объявляется объединение float и int объявление. Значение float сохраняется, но программа позже обращается к значению в качестве intзначения. В такой ситуации значение будет зависеть от внутреннего хранилища значений float . Целочисленное значение не будет надежным.
Примеры
Ниже приведены примеры профсоюзов:
union sign /* A definition and a declaration */
{
int svar;
unsigned uvar;
} number;
В этом примере определяется переменная объединения с sign типом и объявляет переменную с двумя number элементами: svarсо знаком целое число и uvarцелое число без знака. Это объявление позволяет хранить текущее значение number как подписанный или неподписанный. Тег, связанный с этим типом объединения, является sign.
union /* Defines a two-dimensional */
{ /* array named screen */
struct
{
unsigned int icon : 8;
unsigned color : 4;
} window1;
int screenval;
} screen[25][80];
Массив screen содержит 2000 элементов. Каждый элемент массива является отдельным объединением с двумя элементами: window1 и screenval. Элемент window1 — это структура с двумя бит-полями и iconcolor. Элемент screenval является элементом int. В любое время каждый элемент объединения содержит либо представленнуюscreenval, либо int структуру, window1представленную .
Специфично для Microsoft
Вложенные профсоюзы могут быть объявлены анонимно, когда они являются членами другой структуры или объединения. Ниже приведен пример безымяного объединения:
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 */
Объединения часто вложены в структуру, которая включает поле, предоставляющее тип данных, содержащихся в союзе в любое время. Вот пример объявления для такого объединения:
struct x
{
int type_tag;
union
{
int x;
float y;
}
}
Сведения о ссылки на профсоюзы см. в разделе "Структура" и "Члены союза ".
Конец раздела, относящегося к Microsoft