【发布时间】:2016-02-13 19:06:14
【问题描述】:
这是this 的后续问题。
难道DWORD 在某些平台上与int相同(如何检查?)?如果是这样的话,那么:
DWORD v1, v2, v3, Build;
GetVersion(&v1, &v2, &v3, &Build);
sprintf(VersionStr, "%d.%d.%d.%d", v1, v2, v3, Build);
在那个平台上不是未定义的行为,对吗?
或者上面的代码总是 UB 无处不在?
如何在该平台上检查DWORD是否与int相同?
(因为也许我正在考虑在上面运行此代码的那台计算机上不是未定义的行为)
【问题讨论】:
-
我在 Windows 7 的 Visual Studio 2013 环境中找到了这段代码:
typedef unsigned long DWORD; -
@JoachimPileborg:所以我的代码总是 UB?
-
绝不是只是
int。可能是unsigned long,也可能是unsigned int,重要的是它总是unsigned并且总是32 位。 -
是的,使用错误的格式是未定义的行为,即使对于像
signed与unsigned这样简单的事情也是如此。参见例如stackoverflow.com/q/5851524/440558
标签: c++