Entre int32
e int32_t
, (e da mesma forma entre int8
e int8_t
) a diferença é bastante simples: o padrão C define int8_t
e int32_t
, mas não define nada com o nome int8
ou int32
- o último (se existirem) é provavelmente de algum outro cabeçalho ou biblioteca (muito provavelmente é anterior à adição de int8_t
e int32_t
em C99).
Plain int
é um pouco diferente dos outros. Onde int8_t
e int32_t
cada um tem um tamanho especificado, int
pode ser qualquer tamanho> = 16 bits. Em momentos diferentes, 16 bits e 32 bits foram razoavelmente comuns (e para uma implementação de 64 bits, provavelmente deveria ser 64 bits).
Por outro lado, int
tem a garantia de estar presente em todas as implementações de C, onde int8_t
e int32_t
não estão. É provável que haja dúvidas se isso é importante para você. Se você usa C em pequenos sistemas embarcados e / ou compiladores mais antigos, pode ser um problema. Se você usá-lo principalmente com um compilador moderno em máquinas desktop / servidor, provavelmente não será.
Oops - perdi a parte sobre char
. Você usaria ao int8_t
invés de char se (e somente se) você quisesse um tipo inteiro garantido com exatamente 8 bits de tamanho. Se você deseja armazenar caracteres, provavelmente deseja usar em seu char
lugar. Seu tamanho pode variar (em termos de número de bits), mas é garantido que seja exatamente um byte. Porém, uma pequena estranheza: não há garantia sobre se um plano char
é assinado ou não (e muitos compiladores podem torná-lo qualquer um, dependendo de um sinalizador de tempo de compilação). Se você precisa garantir que ele seja assinado ou não, você precisa especificar isso explicitamente.
bool_t
- nunca ouvi falar disso antes. O padrão C é definido_Bool
como um tipo integrado.bool
é definido apenas se você#include <stdbool.h>
(como uma macro que se expande para_Bool
).Os tipos de dados _t são tipos de typedef no cabeçalho stdint.h, enquanto int é um tipo de dados fundamental integrado. Isso torna o _t disponível apenas se stdint.h existir. int por outro lado tem a garantia de existência.
fonte
Sempre tenha em mente que 'tamanho' é variável se não for especificado explicitamente, portanto, se você declarar
Em alguns sistemas, pode resultar em inteiros de 16 bits por compilador e em outros pode resultar em inteiros de 32 bits (ou inteiros de 64 bits em sistemas mais novos).
Em ambientes embarcados, isso pode resultar em resultados estranhos (especialmente ao lidar com E / S mapeada na memória ou pode ser considerada uma situação de array simples), por isso é altamente recomendado especificar variáveis de tamanho fixo. Em sistemas legados, você pode encontrar
A partir do C99, os designers adicionaram o arquivo de cabeçalho stdint.h que essencialmente aproveita typedefs semelhantes.
Em um sistema baseado em Windows, você pode ver entradas no arquivo de cabeçalho stdin.h como
Há muito mais nisso, como inteiros de largura mínima ou tipos inteiros de largura exata, acho que não é uma coisa ruim explorar stdint.h para um melhor entendimento.
fonte
typedef short INT16;
nãotypedefs short INT16
.