qui è molto codice di problema semplificato ho:Unione anonima all'interno di struct non in 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; }
E quello che non undestand è questo:
$ 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’
Utilizzando GCC
senza -std
opzione compila codice di cui sopra senza problemi (e la codice simile funziona abbastanza bene), ma sembra che c99
non consenta questa tecnica. Perché è così ed è possibile rendere c99
(o c89
, c90
) compatibile? Grazie.
Solo una nota, clang compila codice fornito con e senza '-std = c99' in modo silenzioso, senza errori e avvisi. – Martin