Bonjour,
Je suis en train de migrer une application du 32bits vers le 64bits, et je rencontre un petit problème avec printf().
Dans cet application, nous utilisons pour la connexion à la BD un type int4 sur 4 octets, défini de la manière suivante :
1 2 3 4 5
| // en 32 bits :
typedef long int4;
// en 64 bits :
typedef int int4; |
Ces définitions sont spécifique à notre BD et ne peuvent donc pas être modifié.
Le problème vient de l'utilisation de printf() et de tous ses dérivés.
En effet actuellement nous utiliser %ld pour afficher ces valeurs :
1 2
| int4 value = ...
printf("value=%ld\n", value); |
Le problème, c'est qu'en passant en 64bits le type de notre int4 change, et qu'il faudrait utiliser %d à la place. Le compilateur nous générant alors un warning :
format '%ld' expects type 'long int', but argument 2 has type 'int'
Bien sûr on pourrait changer tous nos %ld en %d, mais alors on se retrouve avec le warning inverse lorsqu'on compile en 32bits.
Vous l'aurez compris, l'objectif serait de pouvoir compiler le même code en 32bits ou en 64bits, sans avoir à modifier le code à chaque fois.
Y-a-il ne solution propre à cela ?
J'ai fouillé dans la doc de printf() mais il ne me semble pas y avoir de solution...

a++
Partager