#pragma pack

De Appmethod Topics
Aller à : navigation, rechercher

Remonter à Présentation des directives pragma - Index

Syntaxe (Voir Pseudo-grammaire)

#pragma pack([{push | pop}[,]] [identificateur[,]] [n])

Description

La directive #pragma pack(n) revient à utiliser #pragma option avec l'option de compilation -a. n représente l'alignement d'octets qui détermine comment le compilateur aligne les données en mémoire. Pour de plus amples informations, voir l'option de compilation -a. #pragma pack peut aussi être utilisée avec les arguments push et pop, offrant la même fonctionnalité que la directive #pragma option avec push et pop.

Le tableau suivant compare l'utilisation de #pragma pack avec #pragma option.

#pragma pack #pragma option

#pragma pack(n)

#pragma option -an

#pragma pack(push, n)

#pragma option push -an

#pragma pack(pop)

#pragma option pop


La directive #pragma pack accepte également un argument identificateur qui doit être utilisé en combinaison avec push ou pop.

#pragma pack sans arguments

#pragma pack()

L'utilisation de #pragma pack sans arguments définit la taille de package à l'alignement de départ –aX (qui a la valeur par défaut 8). L'alignement de départ -aX est considéré comme l'alignement au départ de la compilation APRES le traitement de toutes les options de la ligne de commande.

#pragma pack utilisant une valeur pour n

#pragma pack(8)

L'utilisation de #pragma pack avec une valeur pour 'n' définit l'alignement en cours à 'n'. Les valeurs autorisées pour 'n' sont : 1,2,4,8 et 16.

#pragma pack utilisant push

#pragma pack(push)

L'utilisation de #pragma pack avec push pousse l'alignement en cours dans la pile interne des alignements.

#pragma pack utilisant push, identifier

#pragma pack(push, ident)

L'utilisation de #pragma pack avec push et un identificateur associe l'alignement poussé avec 'ident'.

#pragma pack utilisant push et n

#pragma pack(push, 8)
#pragma pack(push, ident, 8)

L'utilisation de #pragma pack avec push et une valeur pour 'n', exécute le pragma pack push ou pragma pack push ident puis définit ensuite l'alignement en cours à 'n'.

#pragma pack utilisant pop

#pragma pack(pop)

L'utilisation de #pragma pack avec pop extrait de la pile d'alignement et définit l'alignement en cours au dernier alignement placé dans la pile. Si le pop n'a pas de push correspondant, toute la pile d'alignement est sortie, un avertissement est émis et l'alignement revient à l'alignement de départ -aX.

#pragma pack utilisant pop, identifier

#pragma pop(pop, ident)

L'utilisation de #pragma pack avec pop et un identificateur extrait de la pile jusqu'à avoir trouvé l'identificateur et définit l'alignement avec l'alignement placé par le #pragma pack(push, identifier) précédent correspondant. Si le pop avec un identificateur ne trouve pas le push correspondant avec l'identificateur, toute la pile d'alignement est sortie, un avertissement est émis :

W8083: Pragma pack pop sans pack push correspondant

Puis l'alignement revient à l'alignement de départ -aX.

#pragma pack utilisant pop et n

#pragma pack(pop, 8)
#pragma pack(pop, ident, 8)

L'utilisation de #pragma pack avec pop et une valeur pour 'n', exécute pragma pack pop ou pragma pack pop identificateur. Ensuite l'alignement en cours est défini à 'n' sauf si pop n'a pas trouvé le push correspondant, dans ce cas 'n' n'est pas pris en compte, un avertissement est émis et l'alignement revient à l'alignement de départ -aX.

Conditions d'erreur

Spécifier un 'identificateur' sans push ou pop est une erreur.

Spécifier un alignement différent de 1, 2, 4, 8 ou 16 est une erreur.

Conditions d'avertissement

L'utilisation de #pragma pop sans un push correspondant entraîne un avertissent.