Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Uma "declaração união" especifica um conjunto de valores variáveis e, opcionalmente, uma tag nomeando a união. Os valores das variáveis são chamados de "membros" do sindicato e podem ter diferentes tipos. Os sindicatos são semelhantes aos "registos variantes" noutras línguas.
Sintaxe
struct-or-union-specifier:
struct-or-union
identifier
optar por{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 sendo
struct-declaration:
specifier-qualifier-list
struct-declarator-list
;
specifier-qualifier-list:
type-specifier
specifier-qualifier-list
optar por
type-qualifier
specifier-qualifier-list
optar por
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 sindicatos não podem ter um tipo, tipo voidou tipo de função incompleto. Portanto, os membros não podem ser uma instância do sindicato, mas podem ser indicações para o tipo de sindicato que está sendo declarado.
Uma declaração de tipo união é apenas um modelo. A memória não é reservada até que a variável seja declarada.
Observação
Se uma união de dois tipos é declarada e um valor é armazenado, mas a união é acessada com o outro tipo, os resultados não são confiáveis. Por exemplo, uma união de float e int é declarada. Um float valor é armazenado, mas o programa acessa posteriormente o valor como um intarquivo . Em tal situação, o valor dependeria do armazenamento interno de float valores. O valor inteiro não seria confiável.
Exemplos
Seguem-se exemplos de sindicatos:
union sign /* A definition and a declaration */
{
int svar;
unsigned uvar;
} number;
Este exemplo define uma variável de união com sign tipo e declara uma variável chamada number que tem dois membros: svar, um inteiro assinado e uvar, um inteiro não assinado. Esta declaração permite que o valor atual de seja armazenado como um valor assinado ou não assinado number . A tag 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 de campo de bits, icon e color. O screenval membro é um int. Em qualquer momento, cada elemento da união detém o int representado por screenval ou a estrutura representada por window1.
Específico da Microsoft
Os sindicatos aninhados podem ser declarados anonimamente quando são membros de outra estrutura ou sindicato. 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 fornece o tipo de dados contidos na união em um determinado momento. 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.
END Específico da Microsoft