动态地确定整数的基于该系统(C ++)上的类型(dynamically determine the

2019-09-16 13:58发布

我写一个程序将数据存储到一个文件中的每个32位(即4个字节在一个时间)的单元上。 我写的代码,在64位的窗口系统,但我使用的编译器是32位(的mingw32)。 在当前的系统中,一个INT长大小是相同的,32位(4字节)。 我当前通过与G ++重新编译代码移植到其它系统(不改变代码)。 然而,我发现,int的长度或长是不同的,这取决于系统。 是,任何方式(如在头文件使用宏)来确定的整数的大小,以便决定是否int或长应作为在代码的数据类型? 我必须重新编译代码在4种不同类型的系统,这是真的,如果我修改代码来为每个系统4级不同的副本头疼。

Answer 1:

什么,你想要做的是使用标准的类型,如int32_t 。 这种类型总是32位。 我目前在便携式数据库(Berkeley数据库),用于跨系统兼容性使用这些类型。

见这里的所有的人。

包括stdint.h获得这些定义。



Answer 2:

这与C99提供一个典型的解决方案的常见问题。

<stdint.h>定义一组提供特定的尺寸,最快的尺寸和最小尺寸的整数类型。 解决的时候正是你的问题这是非常有用的。

这是你正在使用的mingw32一件好事,因为不幸的是,我最后一次检查微软没有提供stdint.h与他们的API。 如果有人确实需要这种针对Windows,有一个开源版本,请参见: http://code.google.com/p/msinttypes/



Answer 3:

您可以使用sizeof(int)以确定该整数的大小。

如果你需要一个特定的大小,你应该使用int32_t(或的int64_t)从stdint.h



Answer 4:

IMO的问题,最好的办法是不使用intlong long ,等等,而是独立于平台的类型别名: int8_tint16_tint32_tint64_t等。

只在定义<stdint.h>



文章来源: dynamically determine the type of integer based on the system (c++)