Pragma pack(push,2)

Signaler
Messages postés
509
Date d'inscription
samedi 28 juin 2003
Statut
Membre
Dernière intervention
3 août 2010
-
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
-
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

Messages postés
509
Date d'inscription
samedi 28 juin 2003
Statut
Membre
Dernière intervention
3 août 2010

J'ai trouvé! C'est l'alignement des octets.
Messages postés
2671
Date d'inscription
vendredi 25 janvier 2002
Statut
Membre
Dernière intervention
6 février 2013
2
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
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
9
Il ne s'agit pas d'une macro mais d'une directive