2

我需要一对标准整数类型,有符号和无符号,它们对应于(合理解释)机器字长,并且保证彼此大小相同。

在具有干净地址模型的平台上,intptr_t并且uintptr_t符合要求,因此使用这些当然是可能的。

但是,有问题的代码可能需要在各种嵌入式系统上运行。我猜其中一些仍然使用具有 286 样式架构的 CPU,其中最大的有效整数类型小于指针 - 如果不是这样,请纠正我 - 但如果是这样,那么有一个案例要做用于使用较小的整数类型。

那个较小的整数类型可能对应于size_tptrdiff_t- 但这些类型是否保证彼此大小相同?我确实需要能够在有符号和无符号类型之间来回转换而不会丢失。

还有什么我应该考虑的吗?

4

3 回答 3

2

你可以使用size_tssize_t.

更新:

这当然typedef是为了,所以:

typedef size_t uword_t;
typedef ssize_t word_t;

如果您遇到过具有 C99size_t但没有 Posix的系统,ssize_t那么您可以:

  1. 有条件word_t地为该系统定义一次- 或 -
  2. <unistd.h>也许为该系统提供您自己的。它可以ssize_t在完全了解本地环境的情况下进行定义,还可以清理您遇到的任何其他缺失的 Posixness。
于 2012-04-22T07:02:30.483 回答
1

为什么不只使用intand unsigned int

C99 6.2.5/6 型

对于每个有符号整数类型,都有一个对应的(但不同的)无符号整数类型(用关键字 unsigned 指定),它使用相同的存储量(包括符号信息)并具有相同的对齐要求

于 2012-04-22T06:56:37.477 回答
0

我已经确定 zmccord 是正确的,intptr_t并且uintptr_t是既保证可用又清晰明确的类型。如果特定变量需要小于特定平台的变量,则可以使用所需的特定大小声明它。

于 2012-04-23T08:01:43.233 回答