动态确定基于系统的整数类型(c ++)

时间:2012-04-15 19:59:49

标签: c++ int long-integer

我正在编写一个程序,以每32位的单位(即每次4个字节)将数据存储到文件中。我在64位Windows系统中编写了代码,但我使用的编译器是32位(mingw32)。在当前系统中,int的长度是相同的,32位(4字节)。我目前通过使用g ++重新编译(无需更改代码)将代码移植到其他系统。但是,我发现int或long的大小不同,具体取决于系统。是否有任何方式(如在头文件中使用宏)来确定整数的大小,以决定是否应将int或long用作代码中的数据类型?我必须在4种不同类型的系统中重新编译代码,如果我修改代码为每个系统有4个不同的副本,那真的很头疼。

4 个答案:

答案 0 :(得分:10)

您要做的是使用int32_t等标准类型。此类型始终为32位。我目前在便携式数据库(berkeley db)中使用这些类型以实现跨系统兼容性。

请参阅here了解所有这些内容。

包含stdint.h以获取这些定义。

答案 1 :(得分:3)

这是C99提供的规范解决方案的常见问题。

The <stdint.h> header 定义了一组类型,这些类型提供特定大小,最快大小和最小大小的整数。在解决您的问题时它非常有用。

你使用mingw32是一件好事,因为不幸的是,我最后一次检查微软没有提供带有API的stdint.h。如果有人确实需要这个适用于Windows,那么有一个开源版本,请参阅: http://code.google.com/p/msinttypes/

答案 2 :(得分:2)

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

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

答案 3 :(得分:0)

IMO解决问题的最佳方法是不使用intlong long等,而是使用与平台无关的类型别名:int8_tint16_t,{{1 },int32_t

它们在int64_t

中定义