Подтвердить что ты не робот

Colons после имени переменной на C-коде

Возможный дубликат:
Что означает "unsigned temp: 3" означает

Это образец кода C ссылочной страницы.

      signed int _exponent:8;

Какое значение толстой кишки перед "8" и "8"?

4b9b3361

Ответ 1

Это бит. Он действителен только в определении struct, и это означает, что система будет использовать только 8 бит для вашего целого.

Ответ 2

Это битполе, неясная и ошибочная черта структур. Этого должно быть достаточно для поиска информации, которую вам нужно знать, чтобы иметь дело с битовыми полями в коде других людей. Что касается вашего собственного кода, никогда не используйте битовые поля.

Изменить: В соответствии с требованиями Zack битовые поля имеют существенные недостатки по сравнению с выполнением собственной битовой арифметики и отсутствие преимуществ. Вот некоторые из них:

  • Вы можете копировать, сравнивать, сериализовать или десериализовать один элемент битового поля за раз. Выполняя собственную битовую арифметику, вы можете работать с целыми словами одновременно.
  • У вас никогда не будет указателя на элементы битового поля. С помощью собственной битовой арифметики вы можете иметь указатель на большее слово и индекс битов внутри слова как "указатель".
  • Непосредственное чтение/запись структур C на диск или сеть является переносимой на полпути без битовых полей, если вы используете типы фиксированного размера и знаете конечность. Тем не менее, в битовых полях и порядок элементов в более крупном типе, а также общее пространство и выравнивание становятся сильно зависящими от реализации даже в пределах заданной архитектуры процессора.
  • Спецификация C имеет очень странные правила, чем позволяет подписи элементов битового поля отличаться от того, что вы ожидаете от нее, и очень немногие знают об этом.

Для однобитовых флагов использование вашей собственной битовой арифметики вместо битовых полей является полным без проблем. Для больших значений вам нужно упаковать, если слишком сложно выписать всю битовую арифметику повсюду, напишите несколько простых макросов.

Ответ 3

Это спецификация bitfield.

Это означает, что _exponent принимает только 8 биты из signed int, которые обычно принимают больше, чем 8 бит. Как правило, бит-поля используются с неподписанными типами.

IIRC, компилятор будет предупреждать, если что-то, что не вписывается в 8-бит, записывается в _exponent.

Ответ 4

Если этот оператор находится внутри структуры, значит битовые поля.