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