我刚刚开始查看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类型的?
答案 0 :(得分:1)
关于这一点的决定是关于40 years ago的,当时没有完善的C标准。 API今天仍然有效。 30年前针对Windows 3.1编写的软件很有可能仍然在Windows 10下运行。没有多少API能够存在这么长时间,或者被很多开发人员使用。
像HDC
这样的Typedef会增加另一个间接级别,但会使意图更加明确。 HDC
变量应指向设备上下文而不是其他内容。它类似于使用typedef unsigned int Age;
之类的东西来表明变量应该存储年龄值而不是其他东西,例如端口号。