2010-01-27 14 views
25

Por ejemplo, digamos que tenemos una unión¿Se puede inicializar una unión en la declaración?

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

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

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

¿Qué es u32? ..... –

+0

@Prasoon Mis disculpas . Tuve u32 typdef'ed pero no se muestra en el ejemplo. – semaj

Respuesta

29

Utilice una lista de inicialización:

U_U32_F u = { 0xffffffff }; 

Puede establecer otros miembros que la primera de ellas a través de

U_U32_F u = { .f = 42.0 }; 
+14

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

3

Trate U_U32_F u = {0xffffffff};

3

Tenga en cuenta que la inicialización de la unión por socio doesn No trabajo 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 es compatible con la inicialización del primer miembro, que se remonta a K & R II, pero podría estar equivocado al respecto.)

+4

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

+0

El compilador de Microsoft C no cumple (y, en mi conocimiento, no lo tiene, ni lo hará) con ningún estándar en particular. –

Cuestiones relacionadas