相关疑难解决方法(0)

为什么在C++中我们使用DWORD而不是unsigned int?

我不怕承认我是一个C++新手,所以这看起来像是一个愚蠢的问题,但......

我看到DWORD在代码示例中使用了所有地方.当我查看DWORD的真正含义时,它显然只是一个无符号整数(0到4,294,967,295).所以我的问题是,为什么我们有DWORD?它给了我们积分类型'unsigned int'不是什么?它与便携性和机器差异有关吗?

c++ winapi types dword

116
推荐指数
4
解决办法
12万
查看次数

理论和实践中未定义的行为

我很久以前就有别人写的大型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)

我的问题是:

  • 代码是否包含未定义的行为?
  • 是否有任何平台/情况不会出现未定义的行为?也许对于v1的某些值可能没问题?
  • 该软件已经长时间正常工作,所以在实践中,尽管上面是未定义的行为,软件仍能正常工作吗?

PS.这个软件是用10年前的Visual Studio编写的

c++

9
推荐指数
1
解决办法
454
查看次数

这是否会调用未定义的行为?

考虑以下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"用于打印无符号类型.这会调用未定义的行为吗?为什么?

c undefined-behavior

5
推荐指数
1
解决办法
552
查看次数

标签 统计

c++ ×2

c ×1

dword ×1

types ×1

undefined-behavior ×1

winapi ×1