6
votes

Qu'est-ce que le type "INT" compatible dans les fenêtres 32bit & 64bit en C ++?

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?

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.

merci


2 commentaires

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 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 et laissez le compilateur faire les sales tours pour vous.


5 Réponses :


3
votes

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.

Remarque, que int_ptr n'implique pas le pointeur arithmétique. Je veux dire que le type aura la même taille que Void * , ce que vous voulez exactement. Cela ne fonctionnera pas sur toutes les plateformes (je suis sûr que c'est spécifique Windows).


0 commentaires

1
votes

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


0 commentaires

0
votes

Cela pourrait vous aider: http: //lists.debian. Org / Debian-User / 2006/04 / msg00681.html . Malheureusement, votre question semble être dépendante du compilateur.


0 commentaires

3
votes

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, int doit contenir autant qu'un court , et ainsi de suite. Vous ferez mieux de préciser ce dont vous avez besoin.

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 . Ceci contient des types tels que uint32_t / int32_t et uintMax_t / intmax_t . .

Plus important encore, basé sur votre question, il a: uintptr_t / intptr_t . Celles-ci sont garanties pour avoir la taille correcte pour contenir un pointeur sur votre plate-forme.


2 commentaires

Signé Taille_T ? Peut-être que vous vouliez dire SSIZE_T ? :)


@avakar: (presque trois ans plus tard ...) fixe. :-)



3
votes

Sous Visual Studio, vous êtes également proposé __int3264 qui fait beaucoup de même que INT_PTR ...


0 commentaires