在工作中,我一直在尝试在计算机上安装新版本的 Red Hat Linux,更重要的是,我试图运行一段自定义代码。进行此升级时,我注意到以下错误:
cast from 'void*' to 'int' loses precision
此外,我注意到一串其他错误来自强制使用 32 位地址的库。它们似乎本质上是将 in 类型转换为自定义库 32 位值的结果。
底线是这样的。我相信编译器已经将 int 的默认大小从 32 位更改为 64 位。我试图在不编写一个简单的程序来确定整数大小的情况下弄清楚是否是这种情况。此外,是否有办法将大小强制回 32 位,至少作为概念证明?
最佳答案
如果您使用的是 x86_64 机器,int
仍然是 4 个字节。如果是 8,编译器不会告诉你
cast from 'void*' to 'int' loses precision
因为不会丢失精度。它告诉你的是,你试图将一个 8 字节的指针塞进一个 4 字节的 int,这很明显会丢失一些信息。
另外,这只是一个旁注,写这个有多难?
#include <ostream>
#include <iostream>
#define sz(t) std::cout << sizeof(t) << '\n'
int
main(void)
{
sz(char);
sz(int);
sz(long);
sz(void*);
return 0;
}
关于c++ - 使用 Linux、C++、Kdevelop、gcc、64 位应用程序升级问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11417901/