Partilhar via


union Declarações

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

Ver também

Declaradores e declarações variáveis