Эта директива используется для указания компилятору различных параметров. Эти параметры зависят от платформы и используемого компилятора. Обратитесь к руководству или справочнику вашего компилятора для получения дополнительной информации о возможных параметрах, которые вы можете определить с помощью #pragma
. Если компилятор не поддерживает конкретный аргумент для #pragma
, он игнорируется - ошибка не генерируется.
Компилятор, если не указано иное, выстраивает элементы структуры по 2-байтовым или 4-байтовым границам - это упрощает и ускоряет обработку процессором. Здесь структура содержит секретные байты заполнения, чтобы это произошло. Директива pragma pack позволяет вам изменить эту схему выравнивания. Некоторые вещи (особенно в отношении аппаратного обеспечения и встроенного программирования, такого как робототехника, телекоммуникации) не могут позволить себе тратить такие байты, и они отправляют свои данные в точном соответствии. Это означает, что читать данные с аппаратного устройства напрямую в нормальную структуру неразумно. Если вы хотите читать данные, которые точно вписываются в структуру - вы можете указать компилятору сделать структуру точно такой же;
#pragma pack(push, 1) // exact fit - no padding
struct MyStruct
{
char b;
int a;
int array[2];
};
#pragma pack(pop) //back to whatever the previous packing mode was
Без директивы pragma размер структуры составляет 16 байтов - с упаковкой 1 - размер составляет 13 байтов.