W7和Linux Mint中的不同sizeof(long)值

时间:2016-01-11 11:05:02

标签: c windows long-integer sizeof linuxmint

IDE:Code :: Blocks 13.12

编译器:GNU GCC

应用程序类型:控制台应用程序

语言:C

平台:W7和Linux Mint

我为自定义语言编写了一个编译器和解释器,我为Windows和Linux编写了可执行文件。显然,编译器会生成一个由解释器读取的代码文件。我想在Windows和Linux上使用已编译的文件。因此,使用Windows编译器创建的文件必须可由Linux解释器读取,反之亦然。

我无法兼容工作。我发现在Windows中,sizeof(long)= 4,在Linux中,sizeof(long)= 8。由于编译器会将长整数写入输出文件,我认为大小的差异是(部分)我遇到的问题。

我检查了这个论坛,但类似的问题主要是关于编写和编写平台独立的C ++代码。我还发现了一些关于使用(u)intptr_t的建议,但这些也与指针有关。

也许最快的解决方案是在Linux中使用int而不是long,但之后我会为这两个平台使用不同的源代码。

还有其他方法可以解决这个问题吗?

2 个答案:

答案 0 :(得分:2)

考虑将int32_t用于32位2的补码有符号整数类型,并将int64_t用于64位2的补码有符号整数类型。

请注意,编译器不必支持这些类型,但如果有,那么它们必须符合我的描述。

C中的int可以小到-32767到+32767。 long必须至少为32位。 MSVC在64位系统上维持long为32位(它使用LLP64模型)。 C标准没有对尺寸设置上限。这种灵活性允许在各种平台上进行最佳的C编译。

答案 1 :(得分:0)

如果您希望使用特定大小的类型,其大小后缀为 uint64_t long 整数的大小因架构和操作系统而异。 参考链接:https://en.wikipedia.org/wiki/64-bit_computing#64-bit_data_models