与Java或C#不同,C++中的原始数据类型可以根据平台的不同而改变大小。例如,不能保证int是32位整数。各种编译器环境都为此定义了uint32或dword等数据类型,但似乎没有用于固定大小数据类型的标准包含文件。
要实现最大的可移植性,推荐的方法是什么?
发布于 2009-09-06 14:17:38
我发现这个头文件特别有用:BOOST cstdint
通常比发明自己的轮子(需要维护和测试)要好。
发布于 2009-09-06 13:55:21
创建一个名为types.h的头文件,并定义所需的所有固定大小的原始类型(int32、uint32、uint8等)。要支持多个平台,你可以使用#ifdef的,或者为每个平台(include_x86,include_x86_64,include_sparc)创建一个单独的包含目录。在后一种情况下,你将为每个平台都有单独的构建配置,这将在它们的包含路径中包含正确的包含目录。根据Stephen Dewhurst的"The C++ Gotchas“,第二种方法更可取。
顺便说一句,如果您计划在不同平台之间传递二进制数据,您还必须考虑字节顺序。
发布于 2009-09-06 13:55:50
C99标准的一部分是提供这种信息的stdint.h头文件。例如,它定义了一个名为uint32_t的类型。不幸的是,许多编译器不支持stdint.h。我所见过的最好的跨平台stdint.h实现是:http://www.azillionmonkeys.com/qed/pstdint.h。您可以将其包含在您的项目中。
如果您使用的是boost,我相信它也提供了一些与stdint头文件等效的东西。
https://stackoverflow.com/questions/1385709
复制相似问题