Compartir a través de


union Declaraciones

Una "declaración de unión" especifica un conjunto de valores de variable y, opcionalmente, una etiqueta que asigna un nombre a la unión. Los valores de variable se denominan "miembros" de la unión y pueden tener tipos diferentes. Las uniones son similares a "registros variant" en otros lenguajes.

Sintaxis

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

El contenido de unión se define para que sea

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

Una variable con union tipo almacena uno de los valores definidos por ese tipo. Las mismas reglas rigen las declaraciones de estructura y unión. Las uniones también pueden tener campos de bits.

Los miembros de uniones no pueden tener un tipo incompleto, tipo voido tipo de función. Por lo tanto, los miembros no pueden ser una instancia de la unión, pero pueden ser punteros al tipo de unión que se declara.

Una declaración de tipo de unión es solo una plantilla. La memoria no está reservada hasta que se declara la variable.

Nota:

Si se declara una unión de dos tipos y se almacena un valor, pero se obtiene acceso a la unión con el otro tipo, los resultados no son confiables. Por ejemplo, se declara una unión de float y int . Se almacena un float valor, pero el programa accede más adelante al valor como .int En tal situación, el valor dependerá del almacenamiento interno de float valores. El valor entero no sería confiable.

Ejemplos

A continuación se muestran ejemplos de uniones:

union sign   /* A definition and a declaration */
{
    int svar;
    unsigned uvar;
} number;

En este ejemplo se define una variable de unión con sign tipo y se declara una variable denominada number que tiene dos miembros: svar, un entero con signo y uvar, un entero sin signo. Esta declaración permite almacenar el valor actual de number como un valor firmado o sin signo. La etiqueta asociada a este tipo de unión es sign.

union               /* Defines a two-dimensional */
{                   /*  array named screen */
    struct
    {
      unsigned int icon : 8;
      unsigned color : 4;
    } window1;
    int screenval;
} screen[25][80];

La screen matriz contiene 2000 elementos. Cada elemento de la matriz es una unión individual con dos miembros: window1 y screenval. El window1 miembro es una estructura con dos miembros de campo de bits y coloricon . El screenval miembro es .int En cualquier momento dado, cada elemento de unión contiene el int representado por screenval o la estructura representada por window1.

Específicos de Microsoft

Las uniones anidadas se pueden declarar de forma anónima cuando son miembros de otra estructura o unión. Este es un ejemplo de una unión sin nombre:

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 */

Las uniones a menudo se anidan dentro de una estructura que incluye un campo que proporciona el tipo de datos contenidos en la unión en cualquier momento determinado. Este es un ejemplo de una declaración para esta unión:

struct x
{
    int type_tag;
    union
    {
      int x;
      float y;
    }
}

Vea Miembros de estructura y unión para obtener información sobre cómo hacer referencia a uniones.

FIN Específico de Microsoft

Consulte también

Declaradores y declaraciones de variables