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 sizeofoperador.
Em um sistema, pode fazer sentido usar unsigned intpara representar tamanhos; em outro, pode fazer mais sentido usar unsigned longou unsigned long long. ( size_té improvável que seja unsigned charou 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 sizeofproduz um unsigned intnão seria portátil. O código que assume que produz um size_ttem mais probabilidade de ser portátil.
typedef /*This part is implementation dependent */ size_t;