【发布时间】:2016-05-14 21:55:17
【问题描述】:
给定以下 C 代码:
union Test {
struct {
int f1;
int f2;
};
struct {
int f3;
int f4;
int f5;
};
};
union Test test = {.f1 = 1, .f2 = 2};
当我用 gcc 6.1.1 编译它时,f5 将被零初始化。当我使用 clang 3.8.0 时,它不是。我对两个编译器都尝试了-O0 和-O2,但没有任何区别。这是在 Linux x64 上。
在这种情况下,哪种行为是正确的,我可以告诉 clang 表现得像 gcc 吗?原因是我尝试用 clang 编译一些代码,在这种情况下假设零初始化。
更新
由于到目前为止的答案都引用了 C11。标准中是否有任何更改会改变后续版本中的行为?
【问题讨论】:
标签: c gcc initialization clang unions