作为为指针和非指针数据类型创建单独模型的一个明智决定,Microsoft提出了一组数据类型,强烈建议使用它们而不是POD,如int
,__int64
,long
(signed
和unsigned
版本)。
当前模型Microsoft Follows是IL32P64
,它强制所有C类型指针强制转换为指针截断的整数类型。这迫使他们提出_PTR类型。对于每个有效的整数类型(已签名的未标记的),如long
,int
或非POD类型,如DWORD
,他们提出了等效的符号DWORD_PTR
,{{1 }}
如果我们解析了typedef链,那么所有这些类型归结为以下定义
INT_PTR
我想知道的是,为每个整数类型和非POD等价创建不同类型的def的原因,而不是创建一个所有人都使用的类型(比如只有一个#if defined(_WIN64)
typedef unsigned __int64 ULONG_PTR;
#else
typedef unsigned long ULONG_PTR;
#endif
#if defined(_WIN64)
typedef unsigned __int64 LONG_PTR;
#else
typedef unsigned long LONG_PTR;
#endif
和{{1 }})
为什么我想知道?
如果你总是在MS平台上,那么很少有人会对MS的问题提出疑问。如果您的代码是多平台,则会出现问题。您必须为* nix定义等效类型以使您的代码可移植。
我计划只创建两个指针类型INT_PTR
和UINT_PTR
,并且具有相同的定义并使用它,而不管之前的类型是什么。