Est-ce la même? Si non: quelle est la différence? Si oui, pourquoi avez-vous besoin de ce type?
uint32_t
(ou comme les compilateurs pré-C++ 11 l'appellent) est garanti comme un entier non signé 32 bits; unsigned int
est tout entier non signé que le compilateur préfère appeler unsigned int
, dans la mesure où il répond aux exigences de la norme (qui exige pour cela une plage minimale 0-65535).
Comme int
, unsigned int
est généralement un entier qui est rapide à manipuler pour l'architecture actuelle (normalement, il s'inscrit dans un registre), donc il doit être utilisé lorsqu'un entier "normal" et rapide est requis.
uint32_t
, à la place, est utilisé lorsque vous avez besoin d'un entier de largeur exacte, par exemple pour sérialiser dans un fichier, ou lorsque vous avez besoin de cette plage exacte ou que vous comptez sur un débordement non signé pour arriver exactement à 2^32-1
.
Par exemple, sur un processeur 16 bits unsigned int
aura généralement une largeur de 16 bits, tandis que uint32_t
va avoir avoir une largeur de 32 bits.
Par ailleurs, comme le souligne @ Marc Glisse, tandis que unsigned int
est toujours présent, uint32_t
n'est pas obligatoire - une implémentation particulière du compilateur peut ne pas le fournir. Cela est principalement dû au fait que toutes les plates-formes ne peuvent pas facilement fournir un tel type (généralement des DSP avec des tailles de mots étranges).