IDE:代码:: block 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 类型,但那样的话我会为两个平台使用不同的源代码。
还有其他方法可以解决这个问题吗?
最佳答案
考虑对 32 位 2 的补码有符号整数类型使用 int32_t
,对 64 位 2 的补码有符号整数类型使用 int64_t
。
请注意,编译器不必支持这些类型,但如果支持,则它们必须如我所描述的那样。
C 中的 int
可以小到 -32767 到 +32767。 long
必须至少为 32 位。 MSVC 在 64 位系统上将 long
维护为 32 位(它使用 LLP64 模型)。 C 标准没有对大小设置上限。这种灵 active 允许在各种平台上进行最佳的 C 编译。
关于c - W7 和 Linux Mint 中不同的 sizeof(long) 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34719889/