2012-04-15 55 views
4

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

回答

10

你想要做的是使用像int32_t这样的标准类型。这种类型总是32位。我目前在便携式数据库(berkeley db)中使用这些类型以实现跨系统兼容性。

查看here所有这些。

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

+0

非常感谢定义。我认为这就是我期待的:) – user1285419 2012-04-15 20:15:09

2

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

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

3

这是由C99提供了典型的解决方案的共同问题。

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

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

0

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

他们在<stdint.h>