2010-05-29 4 views
1

Je commence tout juste avec la compilation x64.Quel est le type correct à utiliser pour la soustraction du pointeur sur x64?

J'ai un couple de char *, et je les soustrais. Avec une compilation 32 bits, cela fonctionne:

char * p1 = .... 
char * p3 = ... 
int delta = p3 - p1; 

Mais si je compile pour x64 je reçois un avertissement:

warning C4244: 'initializing' : conversion from '__int64' to 'int', 
     possible loss of data 

Quel est le type correct d'utiliser, pour représenter une différence entre deux pointeurs, cela fonctionne dans les deux compiles x86 et x64?

Je sais que je pourrais utiliser __int64 sur la compilation x64, mais je veux aussi que cela fonctionne pour x86, et je ne souhaite pas incorporer un #ifdef ici pour le faire.

Répondre

7

Il existe un type de différence de pointeur spécial.

#include <cstddef> 
ptrdiff_t 

Je ne peux pas tester cela parce que je ne VC++ ici (Linux), mais ptrdiff_t a été fait pour pointer differentiation. GCC a confirmé :).

Ceci a la bonne longueur pour chaque plateforme!

[Mise à jour: C++ utilise std::ptrdiff_t, grâce à l'OSMŒ!]

+2

En C++, il est 'std :: ptrdiff_t'. – sbi