c++ - 使用 Linux、C++、Kdevelop、gcc、64 位应用程序升级问题

标签 c++ linux gcc casting

在工作中,我一直在尝试在计算机上安装新版本的 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/

相关文章:

c++ - 具有不同类型的多个 vector

linux - Mac 上的 Fortran 总线错误

c - 使用 SUSE Linux 和 C 的静态库链接问题

gcc - C/C++编译器(例如GCC)是否通常以2的幂次幂来优化模数?

gcc - 是什么导致 "x.asm:(.text+0xd): undefined reference to ` y'”?

c++ - 使用 mingw730 32 位的 Qt 5.12 项目发布构建中代码位置的偏移量

c++ - C++ Graph Function 中的内存泄漏(valgrind 未具体在线)

c++ - 链接错误 : QtCore. framework/Versions/4/QtCore for architecture x86_64

linux - 期望 "do"的 shell 脚本错误

c++ - uint8_t 类型的 sscanf 占位符是什么?