为什么在 C 中我们使用 DWORD 而不是 unsigned int?

新手上路,请多包涵

我不害怕承认我是一个 C++ 新手,所以这似乎是一个愚蠢的问题,但是……

我看到在代码示例中到处使用 DWORD。当我查看 DWORD 的真正含义时,它显然只是一个无符号整数(0 到 4,294,967,295)。所以我的问题是,为什么我们有 DWORD?整数类型“unsigned int”没有给我们什么?它与便携性和机器差异有关吗?

原文由 dreadwail 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 2.3k
2 个回答

DWORD 不是 C++ 类型,它在 <windows.h> 中定义。

原因是 DWORD 具有 Windows 函数所依赖的特定范围和格式,因此如果您需要该特定范围,请使用该类型。 (或者正如他们所说的“在罗马时,像罗马人那样做。”)对你来说,这恰好对应于 unsigned int ,但情况可能并非总是如此。为了安全起见,请在预期出现 DWORD DWORD ,无论它实际上是什么。

例如,如果他们更改了 unsigned int 的范围或格式,他们可以使用不同的类型来支持 DWORD 以保持相同的要求,并且所有代码都使用 DWORD 将是不明智的。 (同样,他们可以决定 DWORD 需要是 unsigned long long ,更改它,所有使用 DWORD 的代码都是不明智的。)


另请注意 unsigned int 不必 具有 0 到 4,294,967,295 的范围。见 这里

原文由 GManNickG 发布,翻译遵循 CC BY-SA 3.0 许可协议

MS-DOS 和 Windows 3.1 在 16 位模式下运行时,Intel 8086 字为 16 位,Microsoft WORD 为 16 位,Microsoft DWORD 为 32 位,典型编译器的 unsigned int 为 16 位。

当 Windows NT 在 32 位模式下运行时,Intel 80386 字为 32 位,Microsoft WORD 为 16 位,Microsoft DWORD 为 32 位,典型编译器的 unsigned int 为 32 位。 WORD 和 DWORD 这两个名称不再具有自我描述性,但它们保留了 Microsoft 程序的功能。

Windows 在 64 位模式下运行时,Intel 字为 64 位,Microsoft WORD 为 16 位,Microsoft DWORD 为 32 位,典型编译器的 unsigned int 为 32 位。 WORD 和 DWORD 的名称不再具有自描述性,并且 unsigned int 不再符合最小意外原则,但它们保留了许多程序的功能。

我认为 WORD 或 DWORD 永远不会改变。

原文由 Windows programmer 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题