¿Cuándo usarías uint_least16_t?

Estoy mirando stdint.h y dado que tiene uint16_t y uint_fast16_t, ¿cuál es el uso para uint_least16_t? ¿Qué podría desear que no se pueda hacer igual de bien con uno de los otros dos?

Digamos que estás trabajando en un comstackdor con:

  • unsigned char es de 8 bits
  • unsigned short es de 32 bits
  • unsigned int es de 64 bits

Y unsigned int es el ‘más rápido’. En esa plataforma:

  • uint16_t no estaría disponible
  • uint_least16_t sería un valor de 32 bits
  • uint_fast16_t sería un valor de 64 bits

Un poco arcano, pero para eso es.

Lo útil que son es otra historia: veo las variantes de tamaño exacto todo el tiempo. Eso es lo que la gente quiere. Las versiones “menos” y “rápida” que he visto se han usado casi nunca (es posible que solo haya sido en el código de ejemplo, realmente no estoy seguro).

Ah, el enlace publicado por Patrick incluye este “El nombre typedef uint_leastN_t designa un tipo entero sin signo con un ancho de al menos N, de modo que ningún tipo de entero sin signo con menor tamaño tiene al menos el ancho especificado”.

Así que mi entendimiento actual es:

uint_least16_t la cosa más pequeña que es capaz de sostener un uint16

uint_fast16_t lo más rápido que es capaz de sostener un uint16

uint16_t exactamente un uint16, desafortunadamente, puede que no esté disponible en todas las plataformas, en cualquier plataforma donde esté disponible uint_least16_t se referirá a él. Entonces, si se garantizara que existiera en todas las plataformas, no necesitaríamos uint_least16_t en absoluto.

Es parte de la norma c. No necesita un buen caso de uso. :PAG

Consulte esta página y busque la sección titulada “Tipos de enteros de ancho mínimo”.