Quel est le type de données "INT" compatible en C ++ qui peut se redresser à 4 octets sur 32 bits et 8 octets sur 64 bits Windows? P>
Bien que INT_PTR fonctionne bien, mais il réduit la lisibilité ainsi que sa description nous dit de l'utiliser pour le pointeur arithmétique. P>
merci p>
5 Réponses :
Si vous cherchez quelque chose de standard, vous n'avez pas de chance. La norme ne spécifie pas la taille de l'un des types de données intégrés. P>
Remarque, que int_ptr code> n'implique pas le pointeur arithmétique. Je veux dire que le type aura la même taille que
Void * code>, ce que vous voulez exactement. Cela ne fonctionnera pas sur toutes les plateformes (je suis sûr que c'est spécifique Windows). P>
Cela dépend vraiment du compilateur. Je pense que la seule manière fiable (plus ou moins) fiable consiste à utiliser un type de pointeur comme (vide *).
Je pense que le meilleur moyen consiste à utiliser un traitement conditionnel dans votre fichier d'en-tête et définissez un type personnalisé: P >
#ifdef _WIN64 typedef __int64 NATIVEINT; #else typedef __int32 NATIVEINT; #endif
Cela pourrait vous aider: http: //lists.debian. Org / Debian-User / 2006/04 / msg00681.html . Malheureusement, votre question semble être dépendante du compilateur. P>
La norme ne mentionne pas les exigences de taille spécifiques, uniquement que chaque type intégrale doit fournir au moins autant de stockage que le type avant de le faire. Donc, Si vous recherchez des entiers qui ne changent pas de taille en fonction de l'environnement d'exploitation, jetez un coup d'œil au Boost Integer Bibliothèque ou l'en-tête C99 / C ++ 11 Plus important encore, basé sur votre question, il a: int code> doit contenir autant qu'un
court code>, et ainsi de suite. Vous ferez mieux de préciser ce dont vous avez besoin. P>
uint32_t code> /
int32_t code> et
uintMax_t code> /
intmax_t code>. P>.
uintptr_t code> /
intptr_t code>. Celles-ci sont garanties pour avoir la taille correcte pour contenir un pointeur sur votre plate-forme. P>
Signé Taille_T Code>? Peut-être que vous vouliez dire
SSIZE_T CODE>? :)
@avakar: (presque trois ans plus tard ...) fixe. :-)
Sous Visual Studio, vous êtes également proposé __int3264 qui fait beaucoup de même que INT_PTR ... P>
Je pensais que le problème est l'autre sens - que vous avez besoin d'un type de données qui ne redimensionniste pas. Avec redimensionnement de fichiers de données, vous avez le problème que le code peut exécuter sur un système et non de l'autre.
INT I> est généralement le type intégral le plus rapide de la plate-forme. Si vous avez besoin de cela pour compter dans une boucle par exemple, utilisez simplement int i> et laissez le compilateur faire les sales tours pour vous.