我不怕承认我是一个C++新手,所以这看起来像是一个愚蠢的问题,但......
我看到DWORD在代码示例中使用了所有地方.当我查看DWORD的真正含义时,它显然只是一个无符号整数(0到4,294,967,295).所以我的问题是,为什么我们有DWORD?它给了我们积分类型'unsigned int'不是什么?它与便携性和机器差异有关吗?
我很久以前就有别人写的大型C++项目.它包含如下代码:
string CVersion::GetVersionStr() const
{
string ret;
char VersionStr[100];
DWORD v1, v2, v3, Build;
GetVersion(&v1, &v2, &v3, &Build);
sprintf(VersionStr, "%d.%d.%d.%d", v1, v2, v3, Build);
return string(VersionStr);
}
Run Code Online (Sandbox Code Playgroud)
现在我认为由于格式说明符(%d)格式错误,此代码具有未定义的行为.
DWORD 在我的电脑上声明为
typedef unsigned long DWORD;
Run Code Online (Sandbox Code Playgroud)
我的问题是:
PS.这个软件是用10年前的Visual Studio编写的
考虑以下C程序:
#include <stdio.h>
int main(){
int a =-1;
unsigned b=-1;
if(a==b)
printf("%d %d",a,b);
else
printf("Unequal");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在该行中printf("%d %d",a,b);,"%d"用于打印无符号类型.这会调用未定义的行为吗?为什么?