为什么用C++;我们使用DWORD而不是无符号整数吗? 我不害怕承认我是一个C++新手,所以这看起来像是个愚蠢的问题,但是……

为什么用C++;我们使用DWORD而不是无符号整数吗? 我不害怕承认我是一个C++新手,所以这看起来像是个愚蠢的问题,但是……,c++,winapi,types,dword,C++,Winapi,Types,Dword,我看到DWORD在代码示例中随处可见。当我查看DWORD的真正含义时,它显然只是一个无符号整数(0到4294967295)。那么我的问题是,为什么我们有德沃德?整型“unsigned int”没有给我们什么?是否与便携性和机器差异有关? < P> dWord < /C> >不是C++类型,它在 > < /P> 原因是,DWORD有一个特定的范围和Windows函数所依赖的格式,因此如果您需要该特定范围,请使用该类型。(或者就像他们说的“在罗马,做罗马人做的事”)对你来说,这恰好对应于unsi

我看到DWORD在代码示例中随处可见。当我查看DWORD的真正含义时,它显然只是一个无符号整数(0到4294967295)。那么我的问题是,为什么我们有德沃德?整型“unsigned int”没有给我们什么?是否与便携性和机器差异有关?

< P> <代码> dWord < /C> >不是C++类型,它在<代码> <代码> > < /P> 原因是,
DWORD
有一个特定的范围和Windows函数所依赖的格式,因此如果您需要该特定范围,请使用该类型。(或者就像他们说的“在罗马,做罗马人做的事”)对你来说,这恰好对应于
unsigned int
,但情况可能并不总是这样。为了安全起见,当预期出现
DWORD
时,使用
DWORD
,而不管它实际上可能是什么

例如,如果他们更改了
无符号int
的范围或格式,他们可以使用不同的类型作为
DWORD
的基础,以保持相同的要求,而所有使用
DWORD
的代码都是不明智的。(同样地,他们可以决定
DWORD
需要
无符号long
,对其进行更改,并且所有使用
DWORD
的代码都不明智。)



另请注意,
无符号整数
不必具有0到4294967295的范围。请参阅。

SDK开发人员更喜欢使用typedef定义自己的类型。这只允许在一个位置更改基础类型,而不必更改所有客户端代码。遵守这一惯例很重要。DWORD不太可能被更改,但是像DWORD_PTR这样的类型在不同的平台上是不同的,比如Win32和x64。因此,如果某个函数有DWORD参数,请使用DWORD而不是unsigned int,您的代码将在所有未来的windows Header版本中编译。

对于我自己,我假设unsigned int是特定于平台的。整数可以是8位、16位、32位甚至64位


另一方面,DWORD指定其自身的大小,即双字。Word是16位的,所以DWORD在所有平台上都被称为32位。当MS-DOS和Windows 3.1在16位模式下运行时,Intel 8086 Word是16位的,Microsoft Word是16位的,Microsoft DWORD是32位的,典型编译器的无符号整数是16位的

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

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


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

是的,我知道它不是一种类型,我认为它与可移植性有关,并将其与底层数据类型表示分离,但您为我填补了许多漏洞。谢谢+1.解释。但我仍然敢打赌,如果他们真的改变了德沃德,很多程序仍然会中断:)@akusette:我同意。我怀疑他们是否真的会这样做,尤其是在这么晚的阶段windows 7 64位中的DWORD为无符号长。因此,它对于当前开发人员来说已经改变了。@ MalHue:根据文献,它是32位:它在C++中不典型,在WINAPI.不典型的8位<代码> INT/COM>不允许在C或C++标准下进行。但关键仍然是,有些平台使用16位
int
和其他32位
int
“Word是16位的”在1984年是有意义的,但现在真的没有了:-(所谓的“无符号int”不再符合最小惊喜原则)?我猜这意味着int的大小不再等于处理器的最大本机字大小。那么,这是否意味着它与
stdint.h
/
cstdint
具有相同的用途?