Перейти к содержанию
    

Глюк в RAD Studio?

Пишу такую структуру

struct {
  u16 head;

  u8  bit1 : 1,
      bit2 : 1,
      bit3 : 1,
      bit4 : 1,
      bit5 : 1,
      bit6 : 1,
           : 0;

  u8  bit7 : 4,
      bit8 : 1,
      bit9 : 1,
           : 0;

  u8  __rsrv__[3];
  
  u8  tail;
}StructType;


Пользуюсь правилом zero-length битовых полей: если указан ноль, то следующий член расположится на границе контейнера хранения его базового типа.
Т.е. в моем случае bit7 должен идти в начале 3-его (счет с 0) байта. Однако sizeof(StructType) == 10. На компиляторах GCC/Clang получаю нужные 8 байт в сумме.
Никакие #pragma pack() не помогают, все равно 10 байтов. Если вписать вместо 0 число 2 (добитие до 8 бит), то все ок, 8 байтов структура весит. Но не хочется так писать.

Может, есть где-то какая-то настройка?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если отбросить наиболее вероятную гипотезу глюка в RAD, возможно это связано 

с задействованными "по умолчанию" опциями-режимами для GCC и для RADа.

Если есть возможность включения генерации листинга у RAD, "вычитать" включенные опции компилятора сравнить с GCC.

Менее перспективно исследовть те-же опции через IDE RAD.

Могобыть также связано с выравниванием (или не-выравниванием) начала структуры на размерность данных. Выровнять принудительно, может здесь собака порылась.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Выравнивать... хм... ИМХО, конкретно в данном случае это не изменит ситуации, завтра попробую.

Если, конечно, для достижения нужного мне результата RAD хочет, чтобы я замудохался, то лучше вместо 0 допишу 2:biggrin:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

И как Вам "послевкусие", работа в RAD, после практики на IAR, GCC, Keil, "одини словом"  ?   :biggrin:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Одним словом там не обойдешься:biggrin: Минусов много, разумеется.

Но и свои плюсы, конечно, есть. Накидать на форму всяких контролов и разрулить между ними логику сможет любой школьник. Т.е. времени на освоение для бытовых нужд разработчика (всякие там графические оболочки программаторов запилить, сервисные/диагностические утилиты и т.д.) не нужно. Все контролы довольно интуитивны и более-менее нормально описаны в интернетах.

Т.е., хоть среда и с приколдесами, но свою аудиторию и круг задач покрывает, ИМХО. Лет 10 уже в нем клепаю всякое - и простое, и посложнее.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я не знаю, что такое RAD, но если это что-то, собирающее при помощи gcc приложения под виндовс, то обратите внимание на ключ gcc -mno-ms-bitfields. "ms" в названии ключа как бы намекает, кто виноват...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В том и проблема, что я даже не знаю, какой компилятор в этой чудо-среде.

Там в настройках что-то не видно вообще типа компилятора.

Разве что галка - Use 'classic' Borland compiler - true/false:scratch_one-s_head:

P.S. Экспериментально установил, что поле нулевой ширины при любом раскладе вставляет перед следующим полем пустой байт, ничего не выравнивая.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, Arlleex said:

В том и проблема, что я даже не знаю, какой компилятор в этой чудо-среде.

В стародавние времена Borland делал свой собственный компилятор. В какой-то момент (уже когда всё это поделие стало RAD'ом) они стали поняли, что рынок хочет всяких MacOS/Win64, и включили в свою IDE творчески допиленный clang. Под win32, насколько я помню, можно собирать любым компилятором, под остальные платформы - только clang'ом.

Насколько их версия отличается от оригинального, я не разбирался.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Понятно.

Ладно, всем спасибо, досконально бодаться с этим вопросом сейчас нет времни.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...