здесь очень упрощена код проблемы у меня есть:Анонимный союз внутри структуры не в 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; }
И то, что я не undestand это:
$ 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’
Использование GCC
без -std
опции компиляции кода выше, без каких-либо проблем (и аналогичный код работает очень хорошо), но кажется, что c99
не разрешает эту технику. Почему это так и можно сделать, это c99
(или c89
, c90
) Совместим? Благодарю.
Только примечание, clang компилирует заданный код с и без '-std = c99' без каких-либо ошибок и предупреждений. – Martin