int8_t
, int16_t
, int32_t
e int64_t
são do tipo inteiro assinado com largura de exatamente 8, 16, 32 e 64 bits, respectivamente, sem bits de preenchimento e usando complemento de 2 para valores negativos (fornecido apenas se a implementação suportar diretamente o tipo).
int_least8_t
, int_least16_t
, int_least32_t
e int_least64_t
são os menores tipos inteiros com sinal com largura de pelo menos 8, 16, 32 e 64 bits, respectivamente.
Se uma implementação tiver int8_t
, então parece uma escolha natural int_least8_t
, pois é um tipo com largura de pelo menos 8. No entanto, por exemplo, no modelo de dados LLP64, ambos int
e long
são de 32 bits, então int32_t
poderia ser , int
mas int_least32_t
poderia ser long
, o que seria confuso, mas é válido?
Posso razoavelmente esperar que int_least32_t
(e char32_t
) e int32_t
seja do mesmo tipo? Existe uma implementação real onde int_leastX_t difere de intX_t? (exceto DeathStation 9000 )
Not
char32_t
, que é especificado como sendo do mesmo tipo queuint_least32_t
. Definitivamente, esse não é o mesmo tipo queint32_t
ouint_least32_t
.Você já argumentou que, se uma implementação conforme define
int32_t
, então esse tipo é necessariamente um candidato paraint_least32_t
, mas não é necessariamente o único candidato. Então, é razoável supor que todas essas implementações as definirão como o mesmo tipo?Se estiver entre seus objetivos escrever código estritamente conforme, ou pelo menos minimizar suposições desnecessárias, então é claro que não. Caso contrário, é uma questão de opinião. Dado que você está ciente, em primeiro lugar, de que isso pode ser importante e que está pensando em portabilidade, estou inclinado a adivinhar que você está no primeiro campo.
Eu acho improvável nessas circunstâncias que uma implementação escolha tipos diferentes para
int32_t
eint_least32_t
, mas essa é uma questão diferente.Não conheço nenhum, mas não tenho nenhuma razão específica para supor que não exista. Eu mesmo estou firmemente no campo de suposições minimizadoras, então não presto atenção aos tipos reais subjacentes a qualquer um desses typedefs padrão e não escrevo código que depende de quais são essas definições.
Mesmo que não exista tal implementação hoje, ainda poderá haver uma no futuro.