Inteiros Estreitos

Os tipos que são mais estreitos que int raramente são usados para variáveis comuns — em vez disso, usamos int. Isso ocorre porque C converte esses tipos mais estreitos para int em qualquer operação aritmética. Literalmente, não há razão para declarar uma variável local como char, por exemplo.

Particularmente, se o valor for realmente um caractere, você deve declarar a variável como int. Não como char! Usar esse tipo estreito pode forçar o compilador a truncar valores durante a conversão, o que é um desperdício. Além disso, algumas funções retornam um valor de caractere ou -1 para indicar "nenhum caractere". Usar int permite distinguir -1 de um caractere pelo sinal.

Os tipos inteiros estreitos são úteis como partes de outros objetos, como arrays e estruturas. Compare estas declarações de arrays, cujos tamanhos em processadores de 32 bits são mostrados:

signed char ac[1000];   /* 1000 bytes */
short as[1000];         /* 2000 bytes */
int ai[1000];           /* 4000 bytes */
long long all[1000];    /* 8000 bytes */

Além disso, cadeias de caracteres (strings) devem ser compostas por char, porque é isso que todas as funções padrão da biblioteca esperam. Assim, o array ac poderia ser usado como uma cadeia de caracteres, mas os outros não.

Atualizado