专栏中心

EEPW首页 > 专栏 > warning: cast from ‘void*’ to ‘int’ loses precision [-fpermissive] 错误分析

warning: cast from ‘void*’ to ‘int’ loses precision [-fpermissive] 错误分析

发布人:电子禅石 时间:2021-12-02 来源:工程师 发布文章

warning: cast from ‘void*’ to ‘int’ loses precision [-fpermissive] 错误分析


这种错误一般产生在linux 64位机上


因为linux64 上的int为 4个字节


指针为 8个字节


int num = 100;

//此时不会产生错误,但会产生警告,因为4字节的转换为8字节

void* p = (void*) num;

 

 

//此时就会产生错误,因为8字节的指针被强转为4字节的int,数据丢失了

num = (int)p;

 

//解决办法,把int 改为long

long num = 100;

 

void* p = (void*) num;

 

num = (long)p;

————————————————


解决error: cast from ‘int*’ to ‘int’ loses precision [-fpermissive]

这是因为Linux 64位系统上指针类型占用8个字节,而int类型占用4个字节,所以会出现loses precision。

可以先将int* 转成long类型,long类型可以隐式类型转换到int类型

版权声明:本文为CSDN博主「虚渊玄」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/qq_17019203/article/details/100038848


专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们

关键词: C
更多 培训课堂
更多 焦点
更多 视频

技术专区