【发布时间】:2019-10-21 01:31:51
【问题描述】:
考虑以下两个例子:
1.
union test{
struct {
int a;
int b[];
};
};
int main(void){
union test test;
test.a = 10;
printf("test.b[0] = %d", test.b[0]); //prints 0, UB?
}
2.
#include <stdio.h>
union test{
int a;
int b[]; //error: flexible array member in union
};
int main(void){
union test test;
test.a = 10;
printf("test.b[0] = %d", test.b[0]);
}
行为不清楚。我希望这些示例的行为相同(即第一个示例也无法编译),因为6.7.2.1(p13):
匿名结构或联合的成员被认为是 包含结构或联合的成员。
所以我将措辞解释为好像union 包含匿名struct 作为成员,匿名struct 的成员将被视为包含union 的成员。
问题:为什么第一个示例编译正常而不是第二个示例失败?
【问题讨论】:
标签: c struct language-lawyer union