我不确定这是否与编译相关,但我使用的编译器是IAR 7.10.3。
我有一个如下结构:
struct A {
struct {
uint8_t x:1;
uint8_t y:2;
uint8_t z:5;
} b;
};
并将其初始化为:
struct A a = {
.b = 0xFF,
};
现在,当我查看内存中的结构时,只有x位将设置为“1”,其余的将为零。
这是根据C标准表现的吗?
答案 0 :(得分:5)
struct A a = {
.b = 0xFF,
};
由编译器解析为
struct A a = {
.b = {0xFF},
};
相当于
struct A a = {
.b = {0xFF, 0, 0},
};
使用:
struct A a = {
.b = {1, 3, 31},
};
将位字段的所有位设置为1
。或者使用带有uint8_t
和内部结构的联合,并将第一个成员初始化为0xFF
。