C++ DWORD格式说明符

C++ DWORD格式说明符,c++,C++,这是我们的后续问题 在某些平台上,DWORD是否与int相同?如果是这样,那么: DWORD v1, v2, v3, Build; GetVersion(&v1, &v2, &v3, &Build); sprintf(VersionStr, "%d.%d.%d.%d", v1, v2, v3, Build); 在那个平台上不是没有定义的行为,对吗 还是上面的代码总是无处不在 如何检查该平台上的DWORD是否与int相同 (因为我可能认为在上面运行此代

这是我们的后续问题

在某些平台上,
DWORD
是否与
int
相同?如果是这样,那么:

  DWORD v1, v2, v3, Build;
  GetVersion(&v1, &v2, &v3, &Build);
  sprintf(VersionStr, "%d.%d.%d.%d", v1, v2, v3, Build);
在那个平台上不是没有定义的行为,对吗

还是上面的代码总是无处不在

如何检查该平台上的
DWORD
是否与
int
相同


(因为我可能认为在上面运行此代码的计算机上不是未定义的行为)

在32位编译器上,可以用于打印DWORD值的格式说明符是
%lu
。如果要以十进制格式打印值,也可以使用
%ld


您还可以引用一个线程:

我在Windows 7中的Visual Studio 2013环境中找到了这段代码:
typedef unsigned long DWORD@JoachimPileborg:所以我的代码总是UB?它从来不仅仅是
int
。它可以是
无符号长
,也可以是
无符号整数
,这里重要的是它总是
无符号
,并且总是32位。是的,使用错误的格式是未定义的行为,即使是像
有符号
无符号
这样简单的事情。参见,例如,取决于编译器和目标平台。使用GCC并针对64位系统,
long
是64位的,而
DWORD
仍然是32位。@JoachimPileborg:-是的,这取决于编译器。因此我们可以在OP上说:“不,它并不总是UB”。更像是“这取决于”:@Jongware:为什么它取决于如果它总是未签名,那么它总是UB,不是吗?