下面的代码是否保证正常且成功终止?
#include <assert.h>
struct foo_s {
union {
struct {
unsigned a : 10;
unsigned : 6;
};
struct {
unsigned : 10;
unsigned b : 6;
};
struct {
unsigned : 10;
unsigned c : 6;
};
};
};
int main () {
struct foo_s f;
f.a = 0;
f.b = 1;
assert(f.a == 0);
return 0;
}
在回答不同的问题时,提出了在还包含未命名位字段的结构中分配给命名位字段的可能性可能会导致将任意数据写入这些位。C.11 §6.7.2.1 ¶12 状态:
没有声明符但只有冒号和宽度的位域声明表示未命名的位域。
我对此的解读是,未命名的位域只是一个常规位域,唯一的区别是这些位中的值不能直接通过名称获得。是否允许使用“as-if”逻辑推断实现并在这些位中分配任意数据?