aquí es muy simplificado código de problema que tengo:Unión anónima dentro de struct no en c99?
enum node_type { t_int, t_double }; struct int_node { int value; }; struct double_node { double value; }; struct node { enum node_type type; union { struct int_node int_n; struct double_node double_n; }; }; int main(void) { struct int_node i; i.value = 10; struct node n; n.type = t_int; n.int_n = i; return 0; }
Y lo que no undestand es la siguiente:
$ cc us.c $ cc -std=c99 us.c us.c:18:4: warning: declaration does not declare anything us.c: In function ‘main’: us.c:26:4: error: ‘struct node’ has no member named ‘int_n’
Usando GCC
sin -std
opción compila el código de seguridad sin ningún problema (y el código similar está funcionando bastante bien), pero parece que c99
no permite esta técnica. ¿Por qué es así y es posible hacer es c99
(o c89
, c90
) compatible? Gracias.
Solo una nota, clang compila el código dado con y sin '-std = c99' en silencio, sin ningún error ni advertencia. – Martin