ở đây là rất đơn giản mã của vấn đề tôi có:Công đoàn ẩn danh trong cấu trúc không phải trong 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; }
Và những gì tôi không undestand này là:
$ 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’
Sử dụng GCC
mà không -std
tùy chọn biên dịch mã trên mà không cần bất kỳ vấn đề (và mã tương tự đang hoạt động khá tốt), nhưng có vẻ như là c99
không cho phép kỹ thuật này. Tại sao nó như vậy và nó có thể thực hiện là c99
(hoặc c89
, c90
) tương thích? Cảm ơn.
Chỉ cần lưu ý, clang biên dịch mã đã cho và không có '-std = c99' âm thầm, không có bất kỳ lỗi và cảnh báo nào. – Martin