Arlleex 177 4 октября, 2022 Опубликовано 4 октября, 2022 · Жалоба Пишу такую структуру 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 байтов структура весит. Но не хочется так писать. Может, есть где-то какая-то настройка? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
k155la3 27 4 октября, 2022 Опубликовано 4 октября, 2022 · Жалоба Если отбросить наиболее вероятную гипотезу глюка в RAD, возможно это связано с задействованными "по умолчанию" опциями-режимами для GCC и для RADа. Если есть возможность включения генерации листинга у RAD, "вычитать" включенные опции компилятора сравнить с GCC. Менее перспективно исследовть те-же опции через IDE RAD. Могобыть также связано с выравниванием (или не-выравниванием) начала структуры на размерность данных. Выровнять принудительно, может здесь собака порылась. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 177 4 октября, 2022 Опубликовано 4 октября, 2022 · Жалоба Выравнивать... хм... ИМХО, конкретно в данном случае это не изменит ситуации, завтра попробую. Если, конечно, для достижения нужного мне результата RAD хочет, чтобы я замудохался, то лучше вместо 0 допишу 2 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
k155la3 27 4 октября, 2022 Опубликовано 4 октября, 2022 · Жалоба И как Вам "послевкусие", работа в RAD, после практики на IAR, GCC, Keil, "одини словом" ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 177 4 октября, 2022 Опубликовано 4 октября, 2022 · Жалоба Одним словом там не обойдешься Минусов много, разумеется. Но и свои плюсы, конечно, есть. Накидать на форму всяких контролов и разрулить между ними логику сможет любой школьник. Т.е. времени на освоение для бытовых нужд разработчика (всякие там графические оболочки программаторов запилить, сервисные/диагностические утилиты и т.д.) не нужно. Все контролы довольно интуитивны и более-менее нормально описаны в интернетах. Т.е., хоть среда и с приколдесами, но свою аудиторию и круг задач покрывает, ИМХО. Лет 10 уже в нем клепаю всякое - и простое, и посложнее. 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 134 5 октября, 2022 Опубликовано 5 октября, 2022 · Жалоба Я не знаю, что такое RAD, но если это что-то, собирающее при помощи gcc приложения под виндовс, то обратите внимание на ключ gcc -mno-ms-bitfields. "ms" в названии ключа как бы намекает, кто виноват... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 177 5 октября, 2022 Опубликовано 5 октября, 2022 · Жалоба В том и проблема, что я даже не знаю, какой компилятор в этой чудо-среде. Там в настройках что-то не видно вообще типа компилятора. Разве что галка - Use 'classic' Borland compiler - true/false P.S. Экспериментально установил, что поле нулевой ширины при любом раскладе вставляет перед следующим полем пустой байт, ничего не выравнивая. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
esaulenka 7 5 октября, 2022 Опубликовано 5 октября, 2022 · Жалоба 1 hour ago, Arlleex said: В том и проблема, что я даже не знаю, какой компилятор в этой чудо-среде. В стародавние времена Borland делал свой собственный компилятор. В какой-то момент (уже когда всё это поделие стало RAD'ом) они стали поняли, что рынок хочет всяких MacOS/Win64, и включили в свою IDE творчески допиленный clang. Под win32, насколько я помню, можно собирать любым компилятором, под остальные платформы - только clang'ом. Насколько их версия отличается от оригинального, я не разбирался. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 177 5 октября, 2022 Опубликовано 5 октября, 2022 · Жалоба Понятно. Ладно, всем спасибо, досконально бодаться с этим вопросом сейчас нет времни. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться