我试图了解在以特定语言定义函数/结构字段的参数时使用 Windows 数据类型的目的。我已经阅读了详细说明如果“基础类型”发生更改,这将如何防止代码“破坏”的解释。有人可以提供一个简洁的解释和例子来澄清吗?谢谢。
1 回答
在类似的帖子中找到答案(为什么 Win32 API 中没有使用标准数据类型?):
并且这些类型以它们的方式定义而不是使用 int、char 等的原因是它从操作系统的接口中删除了“编译器认为 int 的大小应为的任何内容”。这是一件非常好的事情,因为如果您使用编译器 A、编译器 B 或编译器 C,它们都将使用相同的类型——只有库接口头文件需要做正确的事情来定义类型。
例如,通过定义非标准类型的类型,很容易将 int 从 16 位更改为 32 位。Windows 的第一个 C/C++ 编译器使用 16 位整数。直到 1990 年代中后期,Windows 才获得 32 位 API,直到那时,您使用的是 16 位的 int。想象一下,您有一个运行良好的程序,它使用了数百个 int 变量,突然之间,您必须将所有这些变量都更改为其他变量......这不是很好,对 - 特别是其中一些变量不需要更改,因为将某些代码移至 32 位 int 不会产生任何影响,因此更改这些位没有意义。
应该注意的是,WCHAR 与 const char 不同 - WCHAR 是“宽字符”,因此 wchar_t 是可比较的类型。
因此,基本上,“定义我们自己的类型”是一种保证可以更改底层编译器架构的方法,而无需更改(大部分)源代码。所有进行机器相关编码的大型项目都会做这种事情。