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,但之后我会为这两个平台使用不同的源代码。
还有其他方法可以解决这个问题吗?
答案 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