0

我知道这个问题被问了很多,但我从未见过适合我需要的合适答案。我正在用 C++ 编写一个有趣的编译器和解释器,为了编写它们,我需要确保我使用的类型是 8 位、32 位、64 位等......我找到了,但是我已被警告它可能不适用于所有平台。我还听说有些平台不支持这些大小的整数,但它必须是可能的,因为 java 设法实现了这一点。不幸的是,java源代码不可用。

4

4 回答 4

7

( on c++) 标头包含遵循特定大小的 s <stdint.h><cstdint>typedef

int8_t x;
int16_t y;
int32_t z;

如果 typedef 不存在,则平台不支持它。要检查它,您有一些可用的宏,例如INT16_MIN INT16_MAX定义指定整数的最小值和最大值,以便您自己查看。

于 2013-10-18T11:42:58.017 回答
2

确切的大小类型由 C99 标准在stdint.h头文件中定义(看看这里)。您只需要一个兼容 C99 的编译器,例如现代 GCC 和 Clang。在 C++ 中,请cstdint改用。

此外,OpenJDK 源代码公开发布的,您可以从项目页面提供的链接中下载或浏览并学习。

编辑:有少数平台(外来的、嵌入式的或非常古老的)不声明或支持这些类型。在这些方面,不可能获得确切的尺寸类型,但您仍然可以针对大多数当前使用的家庭/企业处理器而不必担心。

于 2013-10-18T11:43:06.500 回答
2

为什么需要确保您使用的类型恰好是 32 位等。这在编译器或解释器中肯定是不必要的。(您可能需要int_least32_t,这取决于。但通常,您会希望在int任何地方使用,以便编译器可以在任何地方工作——尽管有些程序在 16 位机器上可能对它来说太大了。)

至于便携性:如果您这样做是为了好玩,您唯一需要担心的平台就是 PC。但即使您想扩展到常见的 Unix 平台,您也会发现类似的类型int32_t在那里也可用。您找不到它们的唯一地方是一些奇异的大型机和一些嵌入式系统。(Java 也不支持这两者。)

于 2013-10-18T11:45:39.153 回答
0

由于 C++11 已经发布,有固定宽度的整数类型可以为您提供至少与您想要的一样大的类型。

于 2013-10-18T11:59:17.770 回答