Почему перечисление несовместимо с битовыми полями в Windows?
=============================================================

 Я работаю над интерфейсом протокола EBDS для Windows и Linux. Я пытаюсь упаковать все данные, требуемые протоколом, в структуры, затем записываю саму структуру и все остальные данные в последовательный порт, отправляя их на устройство.

 Первой частью протокола является упаковка данных, а одной из частей пакета является управляющий байт, который соответствует этому описанию:

 Для обработки этого управляющего байта я создал два перечисления и одну структуру:

 Когда я запрашиваю размер структуры sControlByte, при компиляции Windows (Visual Studio 2010) значение равно 6, но в Linux (с использованием gcc 4.2.3) размер структуры равен 1, как и ожидалось.

 Я пытался избавиться от выравнивания с необходимыми атрибутами на обеих платформах, но я не знаю, что мне не хватает ¿Почему размер меняется в зависимости от платформы? ¿Я использую правильные атрибуты для управления выравниванием?

Заранее спасибо

 как точно размечены битовые поля. Многие компиляторы будут использовать обычные целые числа для каждого компонента битового поля, что означает более быструю обработку, но более крупные структуры, если вы не укажете другое предпочтение, которое вы сделали в случае Linux.

Видеть[Во](https://msdn.microsoft.com/en-us/library/ewwyfdbe.aspx) для алгоритма VS2010 использует.

**Редактироват**: Проблема с вашим кодом. Помните, что при знаковом базовом типе один бит битового поля будет использоваться знаковым битом. И ваши перечисления (как и большинство людей) могут быть подписаны (независимо от того, являются ли они, определяется реализацией), и, таким образом, вы можете увидеть сюрпризы при хранении`E_EXTENDED_COMMANDS` в`mMessageType` и сразу узнаешь, что ценности там нет.

 С недавними компиляторами вы можете [сделать перечисления неподписанными](https://en.wikipedia.org/wiki/C++0x#Strongly_typed_enumerations) и избегай этой проблемы.