Является ли следующий код легальным?В C, можете ли вы иметь 128-битное битовое поле
struct BigInt {
uint64_t a : 128;
};
Является ли следующий код легальным?В C, можете ли вы иметь 128-битное битовое поле
struct BigInt {
uint64_t a : 128;
};
Битовое поле должно вписываться в одном int
, так что вы не повезло, если int
не составляет 128 битов на платформе.
(Вы также отсутствует ;
в конце struct
до редактирования.)
Базовые типы битфиля '_Bool',' int' и 'unsigned int' гарантированы. Таким образом, при реализации с 128-битным 'int' будет 128-битное битовое поле. Реализация может предоставить больше типов. Учитывая некоторую поддержку 128-битного целого числа на более мелких архитектурах, может быть также 128-битное битовое поле. – Olaf
Не легальным в стандартном С11 (на большинстве платформ, в принципе, int
может быть 128 бит, но я никогда встретил платформу, имеющую это). Прочитайте n1570 (проект спецификации).
Но на некоторых платформах недавние составители (например GCC 6) обеспечивают __int128
as an extension. Вы не будете использовать это как битовое поле, но как своего рода интегральный тип.
См. Также this ответ на соответствующий вопрос.
Прочтите весь стандарт? Как насчет фрагмента? –
1) Стандарт позволяет 128 бит 'int', поэтому могут быть 128-битные бит-поля. 2) Стандарт позволяет реализации поддерживать другие типы для бит-полей. Поэтому '__int128' может использоваться как битполе. Вывод: стандарт не запрещает! (Фактический вопрос будет тем, что он использовал бы). – Olaf
Похож на XY-проблему. Почему вы ** думаете, что хотите этого? – Olaf