Я разрабатываю программу для процессора 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;