初始化匿名结构的位域

时间:2014-07-24 15:45:27

标签: c

我不确定这是否与编译相关,但我使用的编译器是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标准表现的吗?

1 个答案:

答案 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

相关问题