首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C:使用32位程序时,在Windows 64位计算机上将int强制转换为int*时出现警告

C:使用32位程序时,在Windows 64位计算机上将int强制转换为int*时出现警告
EN

Stack Overflow用户
提问于 2021-02-27 22:42:01
回答 1查看 101关注 0票数 0

我正在开发一个遗留的32位程序,其中有许多像DWORD* a= (DWORD*)b这样的强制转换,其中b是一个本机int,我收到了很多这样的警告:

Cast to 'DWORD *‘(aka 'unsigned int*') from smaller integer type 'int’['clang:-Wint-to-pointer-cast]

因为在编译过程中大小是相等的,所以这没问题,但我不明白Clang是怎么知道这一点的。除了完全禁用它之外,我还能做些什么来满足此警告?

编辑:这个问题的前提是不好的,因为我误解了Clang,一个编译器,和clangd,调用Clang的语言服务器。语言服务器不知道我的目标是x86。

EN

Stack Overflow用户

回答已采纳

发布于 2021-02-28 02:22:01

所以问题出在(DWORD*)b上,但b的类型是int。这意味着需要重新设计代码,因为有人正在将指针填充到int中。微软为指针大小的整数创建了一个特殊的类型:DWORD_PTR。当然,在stdint.h中有一个,如果你愿意,你可以使用它,但是如果你已经在使用DWORD,你可以使用DWORD_PTR。问题不是在这条线路上发生的。问题发生在从指针为b赋值的那一行。

b的类型更改为intptr_tuintptr_tDWORD_PTR,并保留更改,直到错误消失。如果你来到一个你不能做到的地方,那部分代码需要重新设计。

微软自己的编译器现在甚至在32位编译中,当类型不是整数指针类型时也会产生警告。最好以警告为首。

在整数中填充指针不再是推荐的做法,但Win32应用编程接口到处都是这样做的,所以在罗马...

票数 4
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66399930

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档