我不害怕承认我是一个 C++ 新手,所以这似乎是一个愚蠢的问题,但是……
我看到在代码示例中到处使用 DWORD。当我查看 DWORD 的真正含义时,它显然只是一个无符号整数(0 到 4,294,967,295)。所以我的问题是,为什么我们有 DWORD?整数类型“unsigned int”没有给我们什么?它与便携性和机器差异有关吗?
原文由 dreadwail 发布,翻译遵循 CC BY-SA 4.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 许可协议
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.4k 阅读
1 回答1.6k 阅读✓ 已解决
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 的范围。见 这里。