2016-12-21 3 views

ответ

4

Битовое поле должно вписываться в одном int, так что вы не повезло, если int не составляет 128 битов на платформе.

(Вы также отсутствует ; в конце struct до редактирования.)

+0

Базовые типы битфиля '_Bool',' int' и 'unsigned int' гарантированы. Таким образом, при реализации с 128-битным 'int' будет 128-битное битовое поле. Реализация может предоставить больше типов. Учитывая некоторую поддержку 128-битного целого числа на более мелких архитектурах, может быть также 128-битное битовое поле. – Olaf

0

Не легальным в стандартном С11 (на большинстве платформ, в принципе, int может быть 128 бит, но я никогда встретил платформу, имеющую это). Прочитайте n1570 (проект спецификации).

Но на некоторых платформах недавние составители (например GCC 6) обеспечивают __int128 as an extension. Вы не будете использовать это как битовое поле, но как своего рода интегральный тип.

См. Также this ответ на соответствующий вопрос.

+0

Прочтите весь стандарт? Как насчет фрагмента? –

+0

1) Стандарт позволяет 128 бит 'int', поэтому могут быть 128-битные бит-поля. 2) Стандарт позволяет реализации поддерживать другие типы для бит-полей. Поэтому '__int128' может использоваться как битполе. Вывод: стандарт не запрещает! (Фактический вопрос будет тем, что он использовал бы). – Olaf

Смежные вопросы