Кора ARM -M3 uint _fast32 _t vs uint32 _t

Я разрабатываю программу для процессора 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 )<= sizeof (unsigned long )и UINT _MAX <= ULONG _MAX -всегда.

Таким образом, я ожидал бы, что 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;
5
задан Brian Tompsett - 汤莱恩 19 November 2015 в 14:27
поделиться