Pragma pack(push,2)

gagah1 Messages postés 509 Date d'inscription samedi 28 juin 2003 Statut Membre Dernière intervention 3 août 2010 - 20 sept. 2004 à 22:12
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 - 21 sept. 2004 à 18:41
salut à tous!
Quelqu'un pourrait m'expliquer ça sert à quoi le macro:
#pragma pack(push,2) et #pragma pack(pop) parceque quand je déclare une structure comme:

#pragma pack(push,2)
typedef struct{
unsigned short bfType;
unsigned long bfSize;
unsigned short bfReserved1;
unsigned short bfReserved2;
unsigned long bfOffBits;
} BITMAPFILEHEADER;
#pragma pack(pop)

si je mets pas ces macros, la sizeof(BITMAPFILEHEADER) vaut 16 au lieu de 14. Pourquoi? Merci.

3 réponses

gagah1 Messages postés 509 Date d'inscription samedi 28 juin 2003 Statut Membre Dernière intervention 3 août 2010
20 sept. 2004 à 22:41
J'ai trouvé! C'est l'alignement des octets.
0
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
20 sept. 2004 à 22:51
push et pop sont des instructions asm, qui permettent respectivement d'empiler et de dépiler.

Dans ton cas, tu boures au début avec 2 octets pour obtenir un alignement multiple de 4, ensuite avec pop tu dépiles afin de récuperer l'allignement de ta structure.

Shell
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
21 sept. 2004 à 18:41
Il ne s'agit pas d'une macro mais d'une directive
0
Rejoignez-nous