Problème avec sizeof(...) : erreur de taille
Bonjour,
Je viens de découvrir une petite curiosité avec DevCpp, mais que j'ai reproduit aussi avec Builder C++...
J'ai les structures suivante :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| #include <windows.h>
typedef struct _PlaceableMetaHeader{
DWORD Key; /* Magic number (always 9AC6CDD7h) */
WORD Handle; /* Metafile HANDLE number (always 0) */
WORD Left; /* Left coordinate in metafile units */
WORD Top; /* Top coordinate in metafile units */
WORD Right; /* Right coordinate in metafile units */
WORD Bottom; /* Bottom coordinate in metafile units */
WORD Inch; /* Number of metafile units per inch */
DWORD Reserved; /* Reserved (always 0) */
WORD Checksum; /* Checksum value for previous 10 WORDs */
} PLACEABLEMETAHEADER;
typedef struct _WindowsMetaHeader {
WORD FileType; /* Type of metafile (0=memory, 1=disk) */
WORD HeaderSize; /* Size of header in WORDS (always 9) */
WORD Version; /* Version of Microsoft Windows used */
DWORD FileSize; /* Total size of the metafile in WORDs */
WORD NumOfObjects; /* Number of objects in the file */
DWORD MaxRecordSize; /* The size of largest record in WORDs */
WORD NumOfParams; /* Not Used (always 0) */
} WMFHEAD; |
Et le code suivant me renvoie des tailles de 24 octets...
Code:
1 2 3 4 5
| PLACEABLEMETAHEADER stHeader1;
int nTaille = sizeof(stHeader1);// renvoie 24 au lieu de 22
WMFHEAD stHeader2;
nTaille = sizeof(stHeader2);// renvoie 24 au lieu de 18 |
... au lieu de 22 et 18...
J'ai réussi à contourner le problème mais visiblement le sizeof arrondit la taille au multiple de 8 supérieur.
Bon je viens de trouver la solution avec C++ Builder, c'est dans les options de compilation.
Il faut aller dans "Projet \ Options \ Options avancées du compilateur \ Alignement des données : "byte" au lieu de "quad word" (par défaut) "
Vous savez comment changer cette option avec DevCpp ?