我最近一直在做一些Winsock编程。我在Windows SDK中没有做太多事情。我还没有构建一个真正的Win32应用程序,因为我还年轻,当时我没有想到它,但是现在我看一下已经定义的一些类型,它们简单地包含了与平台无关的其他类型,我想知道为什么有人当他们没有必要时会使用它们。我认为在本地对应部件上使用PSTR或DWORD没有任何优势。在Winsock Reference中 有一个页面列出了所有已定义的structs and typedefs。他们键入所有结构为大写字母,我不明白当设计Windows SDK的决定是将所有类型的类型设置为大写字母时,试图完成的整体策略。
我不明白为什么有人,即使在Windows中编写代码时也会使用大写版本,如果他们没有,只是因为它似乎会使代码在未来需要时更难移植。我总是使用原生类型和原始的Winsock结构。我试着去寻找这个问题的答案,但也许我想不出如何正确地表达一个查询。我失踪了,这有什么好处吗?任何人都可以为我阐明这一点吗?
答案 0 :(得分:2)
优点是Windows SDK中的typedef
将根据需要进行调整。最近历史中可能最好的例子是DWORD_PTR
,如果使用得当,它在x64版本中开箱即用,而你必须通过箍来使这个工作与你所谓的“本机类型”一起工作(即来自语言标准的那些)。
另请注意,某些Winsock函数与原始BSD套接字函数不完全相同。因此,人为地将事物分开是有意义的,无论是出于遗留原因还是简洁性。
对于某些未在语言标准中定义的Win32类型,也可以这样说,因为它们会根据您的构建进行调整,例如LPTSTR
。
最后但并非最不重要的是,如果您从事过跨平台编程并且由于各种原因无法依赖stdint.h
中的(全部或部分)类型,那么您会感谢DWORD
等类型,因为它们暗示了一定的宽度,这在与某些界面(API)交谈时是相关的。