1

我最近一直在做一些 Winsock 编程。我在 Windows SDK 中做的事情不多。我从小就没有构建过真正的 Win32 应用程序,当时我也没有考虑过,但现在我查看了一些已定义的类型,它们只是简单地包装了与平台无关的其他类型,我想知道为什么有人当他们不需要时会使用它们。我看不出比使用 PSTR 或 DWORD 比使用本地对应部件有任何优势。在Winsock Reference 中有一个页面列出了所有的结构和 typedef被定义的。他们将所有结构类型定义为大写字母,我不理解当设计 Windows SDK 的决定是像这样将所有类型定义为大写字母时试图完成的总体策略。

我不明白为什么任何人,即使在 Windows 中编写代码,如果他们没有大写版本,也会使用大写版本,仅仅是因为如果将来需要的话,这似乎会使代码更难移植。我总是尽可能使用本机类型和原始 Winsock 结构。我试图做一些寻找这个问题的答案,但也许我想不出如何正确地表达一个查询。我错过了一些优势吗?任何人都可以为我阐明这一点吗?

4

1 回答 1

2

优点是typedefWindows SDK 中的 s 将根据需要进行调整。近期历史上最好的例子可能是DWORD_PTR,在 x64 构建中正确使用的开箱即用的行为,而您必须经历一些困难才能使其与您所谓的“本机类型”(即那些来自语言标准)。

还要记住,一些 Winsock 函数与原始 BSD 套接字函数并不完全对应。因此,出于遗留原因或简洁性,人为地将事物分开是有意义的。

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

最后但并非最不重要的一点是,如果您曾经从事过跨平台编程并且由于各种原因不能依赖(全部或部分)类型stdint.h,您会喜欢诸如DWORD到某个接口(API)。

于 2012-05-12T00:14:03.277 回答