[...] макеты битовых полей определяются реализацией.
Некоторые аспекты определяются реализацией. Другие не определены, например, размер адресуемой единицы хранения, зарезервированной для битового поля.
Это практически проблема?
Это зависит от того, что вы пытаетесь сделать. Многие из тех же самых проблем, которые более широко применяются к типам структур, применяются в микромире к битовым полям. Среди них
- Как и обычно структуры, структуры, содержащие битовые поля, будут последовательно интерпретироваться любой конкретной реализацией, но
- Как и обычно структуры, структуры, содержащие битовые поля, могут интерпретироваться по-разному различными реализациями - возможно, затрагивая только элементы битовых полей.
- Как и в случае с компоновкой элементов структуры, реализациям предоставляется больше свободы выбора структуры битового поля, чем предполагают некоторые программисты.
Я заметил SysV ABI для x86-64,
например, определяет, как должны быть расположены битовые поля, поэтому я полагаю,
использование битовых полей на этой платформе не должно быть проблематичным, даже если я
смешать объектный код, сгенерированный разными компиляторами.
Использование битовых полей не создает проблемы совместимости при смешивании кода, на который можно полагаться при создании и использовании идентичных макетов битовых полей.
Использование битовых полей не создает проблемы переносимости 1030 * для кода, который избегает зависимости от деталей макета битового поля.
Это противоречивые проблемы, потому что совместимость требует согласованной компоновки, но использование деталей компоновки создает проблему переносимости.
Битовые поля аналогичным образом стандартизированы и на других платформах? (Я
в основном заинтересованы в Linux (SysV ABI), MacOs и CygWin.)
Вообще говоря, для размещенных реализаций (включая все ваши примеры) будет платформа ABI, определяющая макет битового поля, для взаимодействия программного обеспечения внутри платформы. ABI не имеет особого отношения к автономным реализациям, но многие, если не все, такие реализации указывают полную информацию о макетах битовых полей. Если вас беспокоит вопрос о том, можете ли вы связать код, использующий битовые поля, скомпилированный с различными реализациями C для одной и той же платформы, и получить правильно работающую программу, тогда ответ почти наверняка «да».