Какой правильный тип использовать для вычитания указателя на x64? - PullRequest
1 голос
/ 30 мая 2010

Я только начинаю с компиляции x64.

У меня есть пара символов *, и я вычитаю их. С 32-битной компиляцией это работает:

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

Но если я скомпилирую для x64, я получу предупреждение:

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

Какой правильный тип использовать, чтобы представить разницу между двумя указателями, который работает в компиляциях x86 и x64?

Я знаю, что мог бы использовать __int64 при компиляции x64, но я хочу, чтобы он работал и для x86, и я бы не хотел вставлять сюда #ifdef для этого.

1 Ответ

7 голосов
/ 30 мая 2010

Существует специальный тип разности указателей.

#include <cstddef>
ptrdiff_t

Я не могу проверить это, потому что у меня нет VC ++ здесь (Linux), но ptrdiff_t был сделан для разности указателей. GCC подтвердил:).

Это имеет правильную длину для каждой платформы!

[Обновление: C ++ использует std::ptrdiff_t, спасибо sbi!]

...