我正在尝试编译以下代码:
union Bool
{
bool b[8] : 8; // (1)
bool b0,b1,b2,b3,b4,b5,b6,b7 : 1;
};
然而,第(1)行没有编译,有什么比特对齐数组的语法?
答案 0 :(得分:1)
您无法在C中声明位数组。
数组的概念基于指针,您只能指向字节,而不能指向字节中的各个位。 C位字段允许您将整数组件打包到比默认情况下编译器更少的内存中。数组不是整数,因此您无法将数组打包到位字段中。如果您想阅读标准,可以在ISO/IEC 9899 - Programming languages - C找到它(查找§6.7.2.1)。
如果您需要速度,可以使用bool数组的并集,如果需要紧凑的内存占用,则可以定义宏以便更方便地访问位字段。