Выравнивание битов, 8 bools-in-1 - PullRequest
1 голос
/ 12 апреля 2011

Я пытаюсь скомпилировать следующий код:

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

Однако строка (1) не компилируется, какой синтаксис для битового выравнивания массива?

1 Ответ

1 голос
/ 12 апреля 2011

Вы не можете объявить массив битов в C.

Концепция массива основана на указателе, и вы можете иметь только указатели на байты, а не на отдельные биты в байте.Битовые поля C позволяют упаковать целочисленные компоненты в меньший объем памяти, чем компилятор по умолчанию.Массив не является целым числом, поэтому вы не можете упаковать массив в битовое поле.Если вы хотите прочитать о стандарте, вы можете найти его в ISO / IEC 9899 - Языки программирования - C (см. §6.7.2.1).

Если вам нужна скорость,вы можете использовать объединение массива bools, а если вам нужен компактный объем памяти, вы можете определить макросы для более удобного доступа к вашим битовым полям.

...