2010-05-29 45 views
1

我剛開始使用x64編譯。在x64上用於指針減法的正確類型是什麼?

我有幾個char *的,我正在減去它們。 使用32位編譯,這個工程:

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

但是,如果我編譯的x64我得到一個警告:

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

什麼是正確的類型使用,以表示兩者之間的區別指針,可以在x86和x64編譯?

我知道我可以在x64編譯時使用__int64,但我希望它也能用於x86,並且我不想在此處嵌入#ifdef來執行此操作。

回答

7

有一個特殊的指針差異類型。

#include <cstddef> 
ptrdiff_t 

我不能對此進行測試,因爲我沒有VC++這裏(Linux)的,但ptrdiff_t是爲指針差異作出。 GCC證實:)。

這對每個平臺都有正確的長度!

[更新:C++使用std::ptrdiff_t,由於SBI!]

+2

在C++中,它是'的std :: ptrdiff_t'。 – sbi 2010-05-29 20:56:49

相關問題