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