这不是关于缩短名称,而是关于可移植性。不同的平台需要对这些内容进行不同的 typedef。
在 Std-C 中,long 可能是 32 位或 64 位,具体取决于您的编译器/目标,因此不能安全地假定它是特定大小。因此,库作者将根据目标平台的知识对自己的类型进行类型定义,以保证一定的大小。
例如
#ifdef _WIN32
typedef __int64 INT64; // long will not be 64 bit on Windows/VC.
#elif __GNU_C__
typedef long INT64; // gcc typically uses 64 bit longs.
#elif // ... other platforms ...
...
#endif
如果编译器在未来版本中更改类型属性,则可以在一处编辑类型。
在过去,您还遇到过 int 大小可能为 16 或 32 位的典型情况,因此您不能在需要 DWORD 大小参数的代码中简单地使用原始 int 类型.
因此你有LPARAM和WPARAM之类的东西。
它也被用作一种抽象形式。这就是为什么你会看到类似的 typedef
typedef int Handle;
因为虽然它现在是 int,但库作者保留稍后将其更改为其他任何内容的能力,例如 void *,或他们认为必要的任何其他类型。
但是客户端代码不需要知道它是一个int,因为这正是它目前的情况。客户端需要知道的只是将其传递给接受Handle 类型的函数。
Typedefs 还允许在编译时进行配置。例如。一些库可能有一个Real 实数类型。可以这样定义
#ifdef USE_DOUBLE_PREC
typedef double Real;
#else
typedef float Real;
#endif
并且库的用户可以在编译时选择设置/DUSE_DOUBLE_PREC 以获得双精度浮点支持,但重要的是无需更改库代码即可使其工作,因为它已被抽象。