Sujet : Re: Question de généricité
De : 314 (at) *nospam* drpi.fr (DrPi)
Groupes : fr.comp.lang.adaDate : 02. Sep 2023, 14:34:35
Autres entêtes
Organisation : Posted through news.alphanet.ch
Message-ID : <ucva4u$h0r$1@shakotay.alphanet.ch>
References : 1 2 3 4 5 6 7 8 9
User-Agent : Mozilla Thunderbird
Une question à mon tour: pourquoi le choix 32, 64, 128 (puissances de deux) puis 255 (=2^8 - 1) et pourquoi +2 pour la longueur des trois premiers tableaux et +1 pour le dernier?
>
Je ne sais pas :p
J'essaie de m'interfacer sur une DLL dont le fichier d'entête associé définit les choses comme ça.
// String types. These include room for the strings and a NULL char,
// or, on the Mac, a length byte followed by the string.
// TW_STR255 must hold less than 256 chars so length fits in first byte.
#if defined(__APPLE__)-- cf: Mac version of TWAIN.h
typedef unsigned char TW_STR32[34], FAR *pTW_STR32;
typedef unsigned char TW_STR64[66], FAR *pTW_STR64;
typedef unsigned char TW_STR128[130], FAR *pTW_STR128;
typedef unsigned char TW_STR255[256], FAR *pTW_STR255;
#else
typedef char TW_STR32[34], FAR *pTW_STR32;
typedef char TW_STR64[66], FAR *pTW_STR64;
typedef char TW_STR128[130], FAR *pTW_STR128;
typedef char TW_STR255[256], FAR *pTW_STR255;
#endif
Je pense que j'ai trouvé la réponse.
Les types TW_STRXXX sont utilisés dans des structures encapsulées dans une directive "#pragma pack (2)".
Donc TW_STR32 a 32 octets pour les caractères + 1 octet pour le zéro de fin de chaîne + 1 octet d'alignement.
Pareil pour les autres. Sauf TW_STR255 qui n'a pas besoin d'octet d'alignement.
En théorie, il n'y a pas besoin de cet octet d'alignement puisque la directive "pack" est là pour ça. Mais peut-être qu'en pratique, avec certains compilateurs, il faut l'ajouter.