c - 初始化匿名结构的位域

标签 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 标准,它应该如何表现?

最佳答案

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/

相关文章:

c - C中最多输入256个字符

c - 通过引用将静态二维结构数组传递给函数

c - 在C中获取所有带前缀的函数

C:当 A >1 时,语句 'return A || 1' 会返回什么?

c++ - 生成二维魔法六边形格子的算法

python - 动态规划递归求解

c - 在 C 中打印字节,仅不可打印字符为十六进制

c - 函数调用中的大括号在 C 中意味着什么?

c - 从 C 程序运行查找以打印给定 inode 编号的文件名?

c - Windows中的 `fprintf()`和 `fscanf()`是否需要以文本模式打开文件