4.9 Структуры, объединения, перечисления и битовые поля
- Доступ к члену объекта-объединения осуществляется через член другого типа (C90 6.3.2.3).
Соответствующие байты представления объекта рассматриваются как объект типа, используемого для доступа. См. Переинтерпретация типов. Это может быть ловушечное представление.
- Рассматривается ли «обычное» битовое поле
intкак битовое полеsigned intили как битовое полеunsigned int(C90 6.5.2, C90 6.5.2.1, C99 и C11 6.7.2, C99 и C11 6.7.2.1).По умолчанию оно рассматривается как
signed int, но это можно изменить с помощью параметра -funsigned-bitfields. - Допустимые типы битовых полей, кроме
_Bool,signed intиunsigned int(C99 и C11 6.7.2.1).Разрешены и другие целочисленные типы, например
long int, а также перечислимые типы, даже в режиме строгого соответствия стандарту. - Допускаются ли атомарные типы для битовых полей (C11 6.7.2.1).
Атомарные типы для битовых полей не допускаются.
- Может ли битовое поле пересекать границу единицы хранения (C90 6.5.2.1, C99 и C11 6.7.2.1).
Определяется ABI.
- Порядок размещения битовых полей внутри единицы хранения (C90 6.5.2.1, C99 и C11 6.7.2.1).
Определяется ABI.
- Выравнивание членов структур, не являющихся битовыми полями (C90 6.5.2.1, C99 и C11 6.7.2.1).
Определяется ABI.
- Целочисленный тип, совместимый с каждым перечислимым типом (C90 6.5.2.2, C99 и C11 6.7.2.2).
Обычно используется тип
unsigned int, если перечисление не содержит отрицательных значений, в противном случае —int. Если указан параметр -fshort-enums, то при наличии отрицательных значений выбирается первый из типовsigned char,shortиint, способный представить все значения; в противном случае выбирается первый из типовunsigned char,unsigned shortиunsigned int, способный представить все значения.Для некоторых целевых платформ параметр -fshort-enums используется по умолчанию; это определяется ABI.
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-15.3.0/gcc/Structures-unions-enumerations-and-bit_002dfields-implementation.html