¿Se puede inicializar una unión en la declaración?

1 minuto de lectura

avatar de usuario
semaj

Por ejemplo, digamos que tenemos un sindicato

typedef union {
unsigned long U32;
float f;
}U_U32_F;

Cuando se declara una variable de este tipo de unión, ¿hay alguna forma de establecer un valor inicial?

U_U32_F u = 0xffffffff;   // Does not work...is there a correct syntax for this?

  • @Prasoon Mis disculpas. Tenía u32 tipeado pero no se muestra en el ejemplo.

    – semaj

    27 de enero de 2010 a las 18:44

Use una lista de inicializadores:

U_U32_F u = { 0xffffffff };

Puede establecer otros miembros además del primero a través de

U_U32_F u = { .f = 42.0 };

  • Solo una nota de que el segundo ejemplo es una característica de C99 que no es compatible con todos los compiladores.

    – Michael Burr

    27 de enero de 2010 a las 20:04

Tenga en cuenta que la inicialización de unión por miembro no funciona en compiladores anteriores a C99, de los cuales hay un número deprimente por ahí. El compilador actual de Microsoft C no lo admite, por ejemplo. (Recuerdo vagamente que ni siquiera admite la inicialización del primer miembro, que se remonta a K&R II, pero podría estar equivocado al respecto).

  • Microsoft más o menos abandonó C y quiere que uses C++ (o incluso mejor: C#); Estoy bastante contento con MinGW, ahora que gcc-4.4 está disponible; en el futuro, Clang/LLVM también podría ser una alternativa viable si está buscando un compilador gratuito

    – Cristóbal

    27 de enero de 2010 a las 23:22

  • El compilador de Microsoft C no se ajusta (y que yo sepa no se ajusta ni se ajustará) a ningún estándar en particular.

    – Mathieu K.

    10 de febrero de 2016 a las 9:24


Tratar U_U32_F u = {0xffffffff};

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad