gpt4 book ai didi

c++ - 如何保证long是4个字节

转载 作者:行者123 更新时间:2023-11-30 00:35:44 25 4
gpt4 key购买 nike

在c++中,有没有办法保证一个long是4个字节?也许是 g++ 的编译器标志?

我们在 linux 程序中重用了一些 windows 代码,在 windows 中 long 是 4 字节,但在我的 linux 机器上 long 是 8 字节。我们不能将所有长整数更改为整数,因为那样会破坏 Windows 代码。

我需要保证 long 是 4 个字节的原因是因为在代码的某些部分,我们有一个结构和一个 char 数组的 union ,并且在为 64 位 linux 编译时,char 数组与其他结构。

这里有一些代码片段用于说明:

struct ABC {
unsigned long data1;
unsigned short data2;
unsigned short data3;
unsigned char data4[8];
};
//sizeof(ABC) (32 bit): 16, sizeof(ABC) (64 bit): 24

union ABC_U {
ABC abc;
unsigned char bytes[16];
};

编辑:

我忘了说,这个问题只在尝试编译 64 位时出现。无论体系结构如何,Windows 似乎都喜欢将 longs 保留为 4 个字节,而 linux g++ 通常使 longs 与指针大小相同。

我倾向于在此处使用 uint32_t,因为 Windows 代码中未使用此特定结构,并且不会全局影响程序。希望代码的任何其他部分都不会出现问题。

我找到了编译器标志 -mlong32,但这也强制指针为 32 位,这是不可取的,因为它强制非标准行为可能会像 PascalCuoq 提到的那样破坏 ABI。

最佳答案

您可以使用 stdint.h 中的 int32_t。

关于c++ - 如何保证long是4个字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18238353/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com