我正在为STM32Fx cortex-M3系列处理器开发程序。在stdint.h中,定义了以下内容:

typedef unsigned int uint_fast32_t;
typedef uint32_t  uint_least32_t;
typedef unsigned long uint32_t;

据我了解。
[u]int_fast[n]_t will give you the fastest data type of at least n bits.
[u]int_least[n]_t will give you the smallest data type of at least n bits.
[u]int[n]_t will give you the data type of exactly n bits.

据我所知,sizeof(unsigned int)
因此,我希望uint_fast32_t是一种数据类型,其大小等于或大于uint32_t的大小。

在皮质M3的情况下,sizeof(unsigned int)== sizeof(unsigned long)==4。因此,就大小而言,上述定义是“正确的”。

但是为什么不以与基础数据类型的名称和逻辑大小一致的方式定义它们,即
typedef unsigned long uint_fast32_t;
typedef unsigned int  uint_least32_t;
typedef uint_fast32_t uint32_t;

有人可以澄清一下基础类型的选择吗?

假设'long'和'int'的大小相同,为什么不对所有三个定义使用相同的数据类型?
typedef unsigned int uint_fast32_t;
typedef unsigned int uint_least32_t;
typedef unsigned int uint32_t;

最佳答案

情况是,只能保证

sizeof(long) >= sizeof(int)

并且不能保证它实际上不再存在。在许多系统上,int通常与long一样长。

关于c - ARM cortex-M3 uint_fast32_t与uint32_t,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11381764/

10-11 20:19