我需要一对有符号和无符号的标准整数类型,它们对应于机器字大小的(合理解释),并且保证彼此大小相同。
在具有干净地址模型的平台上,intptr_t
和uintptr_t
符合要求,因此使用它们肯定是可能的。
但是,有问题的代码可能需要在各种嵌入式系统上运行。我猜其中一些仍然使用具有286风格架构的CPU,其中最大的有效整数类型小于指针 - 请纠正我,如果不是这样 - 但如果是,那么有一个案例要做使用较小的整数类型。
那个较小的整数类型可能会对应size_t
和ptrdiff_t
- 但这些类型是否保证彼此相同?我确实需要能够在签名和无符号类型之间来回转换而不会丢失。
还有什么我应该考虑的吗?
答案 0 :(得分:2)
您可以使用size_t
和ssize_t.
更新
这肯定是typedef
的用途,所以:
typedef size_t uword_t;
typedef ssize_t word_t;
如果您遇到过具有C99 size_t
而不是Posix ssize_t
的系统,那么您可以:
word_t
- 或 - <unistd.h>
。它可以在充分了解当地环境的情况下定义ssize_t
,并清理您遇到的任何其他缺失的Posixness。答案 1 :(得分:1)
为什么不使用int
和unsigned int
?
C99 6.2.5 / 6类型
对于每个有符号整数类型,有一个相应的(但不同的)无符号整数类型(用关键字unsigned指定)使用相同数量的存储(包括符号信息)并且具有相同的对齐要求
答案 2 :(得分:0)
我认为zmccord是正确的,intptr_t
和uintptr_t
是保证可用的类型,并且明确且毫不含糊。如果特定变量需要小于特定平台的变量,则可以使用所需的特定大小声明它。