我不确定这是否与编译相关,但我使用的编译器是 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 标准,它应该如何表现?
最佳答案
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
和内部结构的 union ,并将第一个成员初始化为 0xFF
。
关于c - 初始化匿名结构的位域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24938308/