這裏很簡單的問題,我的代碼有:結構中的匿名聯合不在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; }
什麼我也不是已瞭解此:
$ 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
)兼容?謝謝。
只是一個說明,鏗鏘編寫代碼帶和不帶'-std = c99'靜默,沒有任何錯誤和警告。 – Martin 2010-07-12 11:58:21