在64位Linux机器上的gcc中创建'long'4个字节

Che*_*ath 11 linux 64-bit gcc long-integer

我正在努力将应用程序移植到Linux平台上的64位.该应用程序目前在Linux,Windows,Mac 32位和Windows 64位上受支持.我们经常遇到的问题之一是对int使用long,反之亦然.直到现在这都不是问题,因为long和int在当前支持应用程序的平台中是可互换的(都是4个字节).代码库是一个巨大的代码库,许多遗留代码都带有#defines用于许多数据类型,这使得搜索所有long的使用并使用int适当替换很麻烦.

  1. 作为一个短期解决方案,有没有办法让GCC使用4个字节而不是8个"长"?
  2. 如果有,我们可能面临哪些问题?如果没有,是否有更简单的方法来解决long和int问题?

Win*_*mer 9

-m32 生成32位代码.

-mx32 生成64位代码但使用32位长和指针.

Intel 386和AMD x86-64选项

  • @Windowsprogrammer:`-Dlong = int`将`long int`转换为`int int`,这是一个语法错误. (4认同)
  • @johv:不会.使用-m32,您需要使用带有"通常"32位x86 ABI的库,使用-mx32需要X32库. (2认同)

jan*_*neb 5

  1. 在Linux x86_64上,ABI指定long是8字节类型(LP64).事实上,大多数(如果不是全部)64位Unix系统(包括64位OS X,AFAIK)都是LP64,因此这并不是Linux特有的.

  2. 除了修复你的代码,没有.

如果你需要一个足以存储指针值的可移动整数类型,请使用intptr_t或uintptr_t(但通常希望将指针值存储到整数中意味着你做错了,所以请三思!).对于能够表示两个指针之间差异的整数类型,请使用ptrdiff_t.对于对象的大小,请使用size_t.