【发布时间】:2016-04-15 15:57:22
【问题描述】:
IDE:代码::块 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 类型,但这样两个平台的源代码就会不同。
还有其他方法可以解决这个问题吗?
【问题讨论】:
-
你可以('t)使用固定宽度的变量吗?
-
@Marnix:这是任何二进制格式的问题。无论您碰巧在其上编译的系统上的内部表示形式如何,您都必须决定使用哪种数据格式。此外,它不仅仅是长度,还有字节顺序之类的东西,所以如果你想让你的编译文件在其他架构上工作,仅仅使用 uint64_t 是不够的。
-
您显然通过简单的转换来序列化数据类型。那是非常错误的方式。对移位/屏蔽和固定宽度类型使用正确的序列化。
标签: c windows long-integer sizeof linux-mint