que tienen una estructura:¿Es posible (legal) asignar una unión anónima en un literal compuesto?
typedef struct _n
{
int type;
union {
char *s;
int i;
};
} n;
Cuando intento para asignar un compuesto literal, como:
node n1 = {1, 0};
node n2 = {2, "test"};
gcc me da algunas advertencias tales como:
warning: initialization makes pointer from integer without a cast
warning: initialization from incompatible pointer type
Bueno, es claro que el compilador no está seguro de que yo simplemente asigne un valor a un tipo posiblemente ambiguo. Sin embargo, incluso si trato de especificar con mayor precisión:
node n0 = {type: 1, i: 4};
me sale:
error: unknown field ‘i’ specified in initializer
He leído que si pongo (union <union name>)
antes i:
entonces se puede trabajar. Sin embargo, prefiero tener una unión anónima. ¿Hay una manera de hacerlo?
Me sorprendió la primera vez que lo vi, pero para GCC eso es legal (aunque desaprobado) la sintaxis del inicializador designado. – ephemient
que (supongo que desaprobado) la sintaxis del inicializador que obtuve al leer algún código del módulo kernel ... las estructuras 'fops' a menudo se escriben de esa manera. voy a cambiar a la forma C99 ahora. Lástima de los sindicatos anónimos, no sabía que no eran estándar, gracias por aclararme eso. – Steve