есть структура, 2 поля - short & long, сумма размеров полей вроде как 6, sizeof структуры - 8 . лечится компиляцией с опцией, которая запрещает выравнивание по 2-е. вопрос - что за опция?
Эта опция называется #pragma pack(1)/#pragma pack(). Вот только для обычных приложения не связанных с протоколами и работы с железом пользоватся этим не надо, выгоды в размере не получишь, зато здорово пролетишь в скорости доступа к членам структуры/класса.
Зачем вводить людей в заблуждение? В GCC никакой #pragma pack нет и вообще в GCC (особенно до 3.0) прагм практически нет; более того есть специальная глава в доке, объясняющая *почему* их нет А так в приницпе опция -fpack-struct (вот только я не помню в какой версии она появилась). Но лучше использовать __attribute__((packed)) при той структуре, которую надо упаковать
Оно и правда. И тем не менее, зачем ей пользоваться? Только если нужно обеспечить совместимость с DOS/Windows компиляторами В GCC есть более элегантный механизм аттрибутов
Я тут с TVision балуюсь, так там для передачи данных в окошко надо
структуры заполнять, наступил на те же грабли с выравниванием и
сделал просто типа:
struct{
unsigned pole1 : 16;
unsigned pole2 : 8 и т.д.
}
Понятно что убого, на наверняка!
Зачем-зачем... Я из файла структуру с фиксированными полями из файла читаю - вот зачем! Структуру не я определял, и изменить ее не могу. А прочитать надо корректно и с одного раза
>>Зачем-зачем... Я из файла структуру с фиксированными полями из файла читаю - вот зачем! Структуру не я определял, и изменить ее не могу. А прочитать надо корректно и с одного раза
Как я тебя понимаю. Только что у самого такая же процедура наконец заработала, такой камень с души упал!