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