Ceci est une ancienne révision du document !


Record

De base

Type
 TPoint  =  record
       x : Longint; 
       y : Longint;
 end;

Packed

Source : https://www.freepascal.org/docs-html/ref/refsu15.html

Free Pascal soutient également un packed record, c'est-à-dire un enregistrement où tous les éléments sont alignés sur un octet.

Par conséquent, les deux déclarations suivantes sont équivalentes :

     {$PackRecords 1}  
     Trec2 = Record  
       A : Octet ;  
       B : Mot ;  
    end ;  
     {$PackRecords default}
 

et

     Trec2 = Packed Record  
       A : Octet ;  
       B : Mot ;  
     end;

Notez les {$PackRecords Default} après la première déclaration pour rétablir le paramètre par défaut !

Étant donné que la façon dont les enregistrements sont disposés en mémoire dépend de la plate-forme, la seule façon de garantir une disposition compatible entre les plates-formes (en supposant que tous les champs sont déclarés en utilisant un type ayant la même signification sur ces mêmes plates-formes) est d'utiliser {$PACKRECORDS 1}.

En particulier, si un fichier typé avec des enregistrements, produit par un programme Turbo Pascal, doit être lu, il y a de fortes chances que la tentative de lecture correcte de ce fichier échoue.
La raison en est que le paramètre par défaut de Free Pascal {$PACKRECORDS N} n'est pas nécessairement compatible avec celui de Turbo Pascal.
Il peut être modifié en {$PACKRECORDS 1} ou {$PACKRECORDS 2} selon le paramètre utilisé dans le programme Turbo Pascal qui crée le fichier (bien qu'il puisse toujours échouer avec {$PACKRECORDS 2} en raison des différentes exigences d'alignement de type entre MSDOS 16 bits et votre plate-forme actuelle).

Vous pourriez laisser un commentaire si vous étiez connecté.