Compartilhar via


union Declarações

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

Consulte também

Declaradores e declarações de variável