为什么WINAPI如此冗余?

时间:2018-02-20 17:49:30

标签: winapi

我刚刚开始查看WINAPI,我在Windows数据类型网页上注意到的第一件事就是冗余。例如,LONG32在BaseTsd.h中声明为

typedef signed int LONG32;

和INT32,也在BaseTsd.h中声明

typedef signed int INT32;

DWORD在IntSafe.h中声明为

typedef unsigned long DWORD

而ULONG在WinDef.h中声明为

typedef unsigned long ULONG;

为什么有不同的数据类型,如果它们在实践中完全相同?

另外,我们有这个

typedef HANDLE HCONVLIST; //A handle to a DDE conversation list.
typedef HANDLE HDC; //  A handle to a device context (DC).
typedef HANDLE HDDEDATA; // A handle to DDE data.

为什么有不同的数据类型,如果它们都是HANDLE类型的?

1 个答案:

答案 0 :(得分:1)

关于这一点的决定是关于40 years ago的,当时没有完善的C标准。 API今天仍然有效。 30年前针对Windows 3.1编写的软件很有可能仍然在Windows 10下运行。没有多少API能够存在这么长时间,或者被很多开发人员使用。

HDC这样的Typedef会增加另一个间接级别,但会使意图更加明确。 HDC变量应指向设备上下文而不是其他内容。它类似于使用typedef unsigned int Age;之类的东西来表明变量应该存储年龄值而不是其他东西,例如端口号。