J'ai un projet open source que je veux exécuter/compiler sur des architectures 32 bits et 64 bits. Mais voici le problème: il utilise beaucoup les tableaux dynamiques, et il doit aussi jouer avec leur longueur. Les tableaux dynamiques ont une longueur stockée dans le type size_t
, qui est ulong
sur 64 bits, et uint
sur les systèmes 32 bits.
J'ai du code qui ressemble à ceci:Conception de programmes à compiler sur 32 bits et 64 bits dans D
int i = 0;//this HAS to be int, not uint for some reasons
i = dynArray.length;//error, can't implicitly cast ulong to uint
Je dois i
à int
(sur 32 bits) et sur long
(64bit). size_t
aurait résolu le problème, mais il est unsigned
(soit uint
ou ulong
).
Donc ma question ici est que: comment puis-je créer un type de données entier qui est int
sur 32 bits et long
sur 64 bits? Sera-ce quelque chose comme ça ?:
32bit{
//Declaration for 32 bit version
}else{
//Declaration for 64 bit version
}
Vous voulez ptrdiff_t. Comme size_t vient de signer. –
Pourquoi ne pas lancer explicitement alors, si ça va toujours? –
@SamiKuhmonen c'est parce que l'utilisation d'uint sur 64 bits est un non-sens, je veux être en mesure de tirer parti de la compilation pour 64 bits. – Nafees