Gardez toujours à l'esprit que la "taille" est variable si elle n'est pas explicitement spécifiée, donc si vous déclarez
int i = 10;
Sur certains systèmes, il peut résulter du compilateur un entier de 16 bits et sur d'autres un entier de 32 bits (ou 64 bits sur les systèmes plus récents).
Dans les environnements embarqués, cela peut donner des résultats bizarres (en particulier lors de la gestion des E/S en mémoire ou dans le cas d'un simple tableau), il est donc fortement recommandé de spécifier des variables de taille fixe. Dans les systèmes hérités, vous pouvez rencontrer
typedef short INT16;
typedef int INT32;
typedef long INT64;
À partir de C99, les concepteurs ont ajouté le fichier d'en-tête stdint.h qui exploite essentiellement des typologies similaires.
Sur un système Windows, vous pouvez voir dans le fichier d'en-tête stdin.h les entrées suivantes
typedef signed char int8_t;
typedef signed short int16_t;
typedef signed int int32_t;
typedef unsigned char uint8_t;
Il y a bien plus que cela, comme les types d'entiers de largeur minimale ou de largeur exacte, je pense que ce n'est pas une mauvaise chose d'explorer stdint.h pour une meilleure compréhension.