1

我正在尝试编译以下代码:

union Bool
{
  bool b[8] : 8; // (1)
  bool b0,b1,b2,b3,b4,b5,b6,b7 : 1;
};

但是第 (1) 行没有编译,位对齐数组的语法是什么?

4

1 回答 1

1

您不能在 C 中声明位数组。

数组的概念基于指针,您只能拥有指向字节的指针,而不能指向字节中的各个位。C 位字段允许您将整数组件打包到比编译器默认情况下更少的内存中。数组不是整数,因此您不能将数组打包到位字段中。如果您想阅读该标准,可以在ISO/IEC 9899 - 编程语言 - C中找到它(查找 §6.7.2.1)。

如果你需要速度,你可以使用 bool 数组的联合,如果你需要一个紧凑的内存占用,你可以定义宏来更方便地访问你的位字段。

于 2011-04-12T11:41:16.940 回答