Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么使用Windows定义的数据类型?_Windows_Winapi - Fatal编程技术网

为什么使用Windows定义的数据类型?

为什么使用Windows定义的数据类型?,windows,winapi,Windows,Winapi,我最近一直在做一些Winsock编程。我在Windows SDK中不做很多事情。我年轻时就没有构建过真正的Win32应用程序,当时我也没有考虑过,但现在我看到了一些已经定义的类型,它们只是围绕着其他平台无关的类型,我想知道为什么有人会在不需要的时候使用它们。我不认为使用PSTR或DWORD有任何优势。在 有一个页面列出了所有已定义的。他们将所有结构类型定义为大写字母,我不理解在设计Windows SDK时,将所有类型定义为大写字母的总体策略 我不明白为什么任何人,即使是在Windows中编写代码

我最近一直在做一些Winsock编程。我在Windows SDK中不做很多事情。我年轻时就没有构建过真正的Win32应用程序,当时我也没有考虑过,但现在我看到了一些已经定义的类型,它们只是围绕着其他平台无关的类型,我想知道为什么有人会在不需要的时候使用它们。我不认为使用PSTR或DWORD有任何优势。在 有一个页面列出了所有已定义的。他们将所有结构类型定义为大写字母,我不理解在设计Windows SDK时,将所有类型定义为大写字母的总体策略


我不明白为什么任何人,即使是在Windows中编写代码时,如果没有大写版本,也会使用大写版本,原因很简单,因为如果将来需要的话,这会使代码更难移植。我总是尽可能使用本机类型和原始Winsock结构。我试图寻找这个问题的答案,但也许我想不出如何恰当地表达一个问题。这有什么我没有的优势吗?有人能帮我解释一下吗?

优点是Windows SDK中的
typedef
s将根据需要进行调整。最近历史上最好的例子可能是
DWORD_PTR
,当正确使用时,它在x64版本中的行为是开箱即用的,而为了使用您称之为“本机类型”(即来自语言标准的类型),您必须经历一些困难

还请记住,某些Winsock函数与原始BSD套接字函数并不完全相同。因此,人为地将事物分开是有意义的,无论是出于遗留原因还是为了简洁

对于语言标准中未定义的某些Win32类型也可以这样说,因为它们会根据您的构建进行调整,例如
LPTSTR


最后但并非最不重要的一点是,如果您从事过跨平台编程,并且由于各种原因不能依赖
stdint.h
中的(全部或部分)类型,您会喜欢像
DWORD
这样的类型,因为它们意味着一定的宽度,这在与某些接口(API)交谈时是相关的.

有很多代码从16位移植到32位再移植到64位,几乎不需要修改。因为它依赖于这些typedefs.DWORD_PTR是最糟糕的例子。它添加得太晚了。@Hans:那你为什么不给一个更好的呢?这也是我回答“近代史”的原因: