2

作为为指针和非指针数据类型创建单独模型的明智决定,Microsoft 提出了一组数据类型,强烈建议使用它们而不是像int, __int64, longsignedunsigned版本)这样的 POD。

Microsoft 遵循的当前模型IL32P64迫使所有 C 类型的指针转​​换为易受指针截断的整数类型。这迫使他们想出 _PTR 类型。对于每个有效的整数类型(有符号无符号)long或非intPOD 类型DWORD,他们提出了等效的符号DWORD_PTR, INT_PTR

如果我们解析 typedef 链,所有这些类型都归结为以下定义

#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 

我想知道的是,为每个整数类型和非 POD 等价物创建不同类型定义的原因,而不是创建一个供所有人使用的单一类型(比如一个INT_PTRand UINT_PTR

那我为什么想知道?

如果您一直在 MS 平台,很少会遇到 MS 提出的问题。如果您的代码是多平台的,就会出现问题。您必须为 *nix 定义等效类型以使您的代码可移植。

我打算只创建两个指针类型XI64_PTR,并且XU64_PTR具有等效的定义并使用它,而不管以前的类型是什么。

4

0 回答 0