Estoy intentando globalmente inicializar una unión como en el siguiente ejemplo:unión inicialización
#include <cstdio>
typedef union {
char t[4];
int i;
} a;
enum {
w = 5000,
x,
y,
z
};
a temp = {w};
int main() {
printf("%d %d %d %d %d\n", temp.t[0],temp.t[1],temp.t[2],temp.t[3],temp.i);
return 0;
}
Sin embargo, si ejecuta el código, se le nota que ninguno de temp.i o temp.t [ ...] realmente dan el ítem correcto con el que inicié la unión. Imagino que esto se evitaría si pudiera inicializar manualmente el miembro entero, pero desafortunadamente no puedo. Tampoco puedo cambiar el orden de los elementos dentro de la estructura (el intercambio de las órdenes int y char inicializa todo correctamente) - en realidad son proporcionados por una biblioteca externa. Mi pregunta es: ¿cómo puedo establecer el miembro entero de la estructura globalmente, en lugar del miembro char [4] (o, en este caso, solo el primer elemento del char [])?
EDITAR: ¿Existe también una solución estrictamente C++ para este problema? es decir, una donde la inicialización de struct llamada no funciona (porque no existe en el lenguaje)?
Ah, la belleza; Esto es lo que estaba buscando. Cheers –
Tenga en cuenta que esta es una extensión de idioma no estándar, y que si se mueve a otros compiladores, esto fallará. –
Sí, por eso mencioné gcc/g ++. No parece haber un método válido de C++ para inicializar los miembros de la unión. – evgeny