Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Uma "declaração de união" especifica um conjunto de valores variáveis e, opcionalmente, uma marca que nomeia a união. Os valores de variável são chamados de "membros" da união e podem ter tipos diferentes. Uniões são semelhantes a "registros variantes" em outros idiomas.
Sintaxe
struct-or-union-specifier:
struct-or-union
identifier
optar{struct-declaration-list}
struct-or-union
identifier
struct-or-union:
struct
union
struct-declaration-list:
struct-declaration
struct-declaration-list
struct-declaration
O conteúdo da união é definido como
struct-declaration:
specifier-qualifier-list
struct-declarator-list
;
specifier-qualifier-list:
type-specifier
specifier-qualifier-list
optar
type-qualifier
specifier-qualifier-list
optar
struct-declarator-list:
struct-declarator
struct-declarator-list
,
struct-declarator
Uma variável com union tipo armazena um dos valores definidos por esse tipo. As mesmas regras regem a estrutura e as declarações sindicais. Os sindicatos também podem ter campos de bits.
Os membros de uniões não podem ter um tipo incompleto, tipo voidou tipo de função. Portanto, os membros não podem ser uma instância do sindicato, mas podem ser ponteiros para o tipo de união que está sendo declarado.
Uma declaração de tipo de união é apenas um modelo. A memória não será reservada até que a variável seja declarada.
Observação
Se uma união de dois tipos for declarada e um valor for armazenado, mas a união for acessada com o outro tipo, os resultados não serão confiáveis. Por exemplo, uma união de float e int é declarada. Um float valor é armazenado, mas o programa posteriormente acessa o valor como um int. Nessa situação, o valor dependeria do armazenamento interno de float valores. O valor inteiro não seria confiável.
Exemplos
Veja a seguir exemplos de uniões:
union sign /* A definition and a declaration */
{
int svar;
unsigned uvar;
} number;
Este exemplo define uma variável de união com sign o tipo e declara uma variável nomeada number que tem dois membros: svar, um inteiro com sinal e uvarum inteiro sem sinal. Essa declaração permite que o valor number atual seja armazenado como um valor assinado ou não assinado. A marca associada a esse tipo de união é sign.
union /* Defines a two-dimensional */
{ /* array named screen */
struct
{
unsigned int icon : 8;
unsigned color : 4;
} window1;
int screenval;
} screen[25][80];
A screen matriz contém 2.000 elementos. Cada elemento da matriz é uma união individual com dois membros: window1 e screenval. O window1 membro é uma estrutura com dois membros icon de campo de bits e color. O screenval membro é um int. A qualquer momento, cada elemento union contém o int representado screenval ou a estrutura representada por window1.
Específico da Microsoft
Sindicatos aninhados podem ser declarados anonimamente quando são membros de outra estrutura ou união. Aqui está um exemplo de uma união sem nome:
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 */
Os sindicatos geralmente são aninhados dentro de uma estrutura que inclui um campo que oferece o tipo de dados contidos na união a qualquer momento específico. Aqui está um exemplo de uma declaração para tal união:
struct x
{
int type_tag;
union
{
int x;
float y;
}
}
Consulte Estrutura e Membros do Sindicato para obter informações sobre como referenciar sindicatos.
Fim da seção específica da Microsoft