Windows数据类型…为什么这么多/不可写?
有人可以准确地指出为什么定义了以下typedefs /#定义?与原件相比,它们有什么价值?
typedef char CHAR; #define CONST const typedef float FLOAT; typedef unsigned __int64 DWORD64; //A 64-bit "double"-word?! typedef ULONGLONG DWORDLONG; //What's the difference? typedef ULONG_PTR DWORD_PTR; //What's the difference? typedef long LONG_PTR; //Wasn't INT_PTR enough? typedef signed int LONG32; //Why not "signed long"? typedef unsigned int UINT; //Wait.. UINT is "int","LONG" is also int? typedef unsigned long ULONG; //ULONG is "long",but LONG32 is "int"? what? typedef void *PVOID; //Why not just say void*? typedef void *LPVOID; //What?! typedef ULONG_PTR SIZE_T; //Why not just size_t? 最重要的是: #define VOID void //Assuming this is useful (?),why not typedef? 这些背后的原因是什么?是不是有些抽象我不明白? 编辑: 对于那些提到编译器交叉兼容性的人: 我的问题不在于为什么他们不使用unsigned long long而不是DWORD64。我的问题是为什么任何人使用DWORD64而不是ULONG64(反之亦然)?那些不是64位宽的类型? 或者,作为另一个例子:即使在一个“假设”编译器,这意味着欺骗我们在各方面,ULONG_PTR和UINT_PTR和DWORD_PTR之间的区别是什么?所有抽象数据类型不是仅仅意味着同样的事情 – SIZE_T? 但是,我问为什么他们使用ULONGLONG而不是长久 – 有什么潜在的意义上的差异,既不长久也不是DWORDLONG?
这些冗余名称中的大多数主要存在两个原因:
>它们是为了向后兼容而保留的历史类型 typedef char CHAR; char的符号可以在平台和编译器之间变化,所以这是一个原因。原始开发人员也可能会保留这个开放的字符编码的未来变化,但是当然这是不再相关的,因为我们现在为了这个目的而使用TCHAR。 typedef unsigned __int64 DWORD64; //A 64-bit "double"-word?! 在64位移动期间,他们可能发现一些DWORD参数真的需要64位长,并且可能将其重命名为DWORD64,以便这些API的现有用户不被混淆。 typedef void *PVOID; //Why not just say void*? typedef void *LPVOID; //What?! 这一个可以追溯到16位的日子,当时有一个常规的“近”指针,它们是32位的16位和“远”指针。类型上的L前缀代表“长”或“远”,现在是无意义的,但在那些日子里,这些可能定义如下: typedef void near *PVOID; typedef void far *LPVOID; 更新:对于FLOAT,UINT和ULONG,这些只是“更抽象是好的”的例子,考虑到未来的变化。请记住,Windows还可以在除x86之外的平台上运行 – 您可以想到一种以非标准格式表示浮点数的架构,并且API函数已优化以利用此表示。这可能与C的浮点数据类型相冲突。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- windows-desktop-gadgets – 在没有Visual Studio的情况下调
- 在Windows上运行旧版应用程序
- windows server2012 IIS压力测试500就报错的问题
- windows – 作为服务运行时,QtService应用程序无法连接到系
- winapi – 如何在win32编辑控件中使用“占位符文本”?
- 强制还原导制SQL孤立用户的解决方法……
- 使用SNMP监视Windows Server
- windows-phone-8-emulator – Visual Studio 2015缺少模拟器
- windows – Delphi XE5中的ShowMessage缩短了
- windows – 文件夹图标更改不会生效