Existem 5 tipos de inteiros sem sinal padrão em C:
unsigned char
unsigned short
unsigned int
unsigned long
unsigned long long
com vários requisitos para seus tamanhos e intervalos (resumidamente, o intervalo de cada tipo é um subconjunto do intervalo do próximo tipo, mas alguns deles podem ter o mesmo intervalo).
size_t
é um typedef
(ou seja, um alias) para algum tipo sem sinal (provavelmente um dos acima, mas possivelmente um tipo inteiro sem sinal estendido , embora isso seja improvável). É o tipo fornecido pelo sizeof
operador.
Em um sistema, pode fazer sentido usar unsigned int
para representar tamanhos; em outro, pode fazer mais sentido usar unsigned long
ou unsigned long long
. ( size_t
é improvável que seja unsigned char
ou unsigned short
, mas isso é permitido).
O objetivo de size_t
é aliviar o programador de ter que se preocupar com qual dos tipos predefinidos é usado para representar os tamanhos.
O código que assume que sizeof
produz um unsigned int
não seria portátil. O código que assume que produz um size_t
tem mais probabilidade de ser portátil.
typedef /*This part is implementation dependent */ size_t;