Замечания и примеры

На верх  Назад  Вперёд

Free Pascal также поддерживает 'упакованную запись' (packed record), которая представляет собой запись, где все элементы выровнены по границе байта. В результате, два следующих объявления эквивалентны:

    {$PackRecords 1}

    Trec2 = Record

      A : Byte;

      B : Word;

      end;

    {$PackRecords default}

и

    Trec2 = Packed Record

      A : Byte;

      B : Word;

      end;

Обратите внимание на {$PackRecords Default} после первого объявления, чтобы восстановить настройки по умолчанию!

Учитывая зависимость от характера платформы, как записи расположены в памяти, единственный способ обеспечить совместимое расположение на разных платформах можно с помощью {$PACKRECORDS 1} (учитывая , что все поля объявляются с помощью записи имеют те же значения на этой же платформе).

В частности, если должен быть прочитан типизированный файл с записями, созданный программой на Turbo Pascal, то прочитать файл правильно не всегда будет возможно. Причина заключается в том, что установка {$PACKRECORDS N} по умолчанию Free Pascal не обязательно совместим с Turbo Pascal. Оно может быть изменено в зависимости от установки {$PACKRECORDS 1} или {$PACKRECORDS 2}, используемой в программе на Turbo Pascal , которая создала файл (хотя она может закончится неудачно и с {$PACKRECORDS 2 } из - за различных требований выравнивания типа между 16 битной MSDOS  и текущей платформой).

То же замечание относится и к Delphi: обмен данными будет возможен, только если и источник, и приёмник используют упакованную запись, или если оба находятся на одной платформе, и используют те же настройки {$PACKRECORDS X}.