我所在的公司曾经生产和维护基于68k处理器的小型嵌入式系统。我们希望向前发展,停止维护这些系统,并改用像树莓派这样的设备。因此,我正在移植内部库,以便为这些设备编写软件并进行交叉编译。
我遇到的问题是,这些设备的规格要求严格的类型大小,即short为16位,int和long为32位。由于C规范仅定义了类型的最小尺寸,而我们的用户是缺乏“正式编码”教育的科学家,因此我们在用户代码中遇到了许多类似以下情况的问题:
如果可以避免,我们宁愿不让用户大量重写他们的程序。重新编译GCC可能是一个选择,但在尝试之前我想知道是否有可能,因为我不想浪费努力。所以我的问题基本上是“是否有一些方法在GCC或其他编译器中强制类型到特定大小”?
我遇到的问题是,这些设备的规格要求严格的类型大小,即short为16位,int和long为32位。由于C规范仅定义了类型的最小尺寸,而我们的用户是缺乏“正式编码”教育的科学家,因此我们在用户代码中遇到了许多类似以下情况的问题:
typedef struct {
short int a;
short int b;
} Pair;
...
Pair * p=malloc(4);
如果可以避免,我们宁愿不让用户大量重写他们的程序。重新编译GCC可能是一个选择,但在尝试之前我想知道是否有可能,因为我不想浪费努力。所以我的问题基本上是“是否有一些方法在GCC或其他编译器中强制类型到特定大小”?
int16_t
和类似的类型。 - mch-m32
选项,它可以强制GCC生成32位代码,即使目标处理器是64位的。不确定该选项是否适用于其他处理器。 - user3386109-mx32
会生成 x86_64 代码,但保持long
为 32 位。GCC 文档。 - mafsomalloc
函数需要以字节为单位指定大小,而不是以位为单位。如果这是真正的代码,也许你不需要改变任何东西 :S - mafso