有此代码与 Windows SDK 一起编译:
UINT cFiles = DragQueryFileW(hDrop, 0xFFFFFFFF, NULL, 0);
哪里DragQueryFileW()
有这个签名:
UINT DragQueryFileW(HDROP, UINT, LPWSTR, UINT );
并UINT
在 SDK 标头中的某处定义,如下所示:
typedef unsigned int UINT;
对于int
肯定是32位的平台。像往常一样,像这样UINT
的类型意味着具有独立于系统位数的固定宽度,因此如果必须在其他一些平台上重新编译相同的代码,以DragQueryFileW()
某种方式重新实现的地方也会有一个对应typedef
的UINT
映射到合适的 32-位无符号类型。
现在有一个静态分析工具,它查看0xFFFFFFFF
常量并抱怨它是一个不可移植的幻数,应该-1
改用. 虽然当然-1
是好的和可移植的,但我看不出在0xFFFFFFFF
这里使用常量可能是个问题,因为即使移植类型仍然是 32 位的,并且常量会很好。
在这种情况下,是否使用0xFFFFFFFF
而不是-1
设置所有位安全且可移植?